SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 2120|回复: 13
打印 上一主题 下一主题

帮我用SAS编个小程序好吗?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2004-7-21 16:55:41 | 只看该作者

帮我用SAS编个小程序好吗?

有这样一组数据,3列如下。x为一个指示变量,我想将x连续为1或-1的r,v分别求和,形成一个新数列(仍旧是3列,相当于行被压缩了)。提前表示感谢!
[quote:f313e]x                                   r                                  v
1                        0.164609053        193128
1                        0                         6090
1                       0.164338537          15220
-1                     0                        29856
-1                      -0.082034454        163960
1                       -0.082101806        56046
1                       0.164338537        35945
-1                     0                        14616
-1                      -0.410172272        191044
1                       0.082372323        7904
1                       -0.329218107        27274
1                       0.330305533        98514
-1                     -0.24691358        99294
-1                     -0.082508251        38140
-1                     -0.165152766        18756[/quote:f313e]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2004-7-22 08:12:57 | 只看该作者

Re:

data tem;
   input x r v;
   cards;
1 0.164609053 193128
1 0 6090
1 0.164338537 15220
-1 0 29856
-1 -0.082034454 163960
1 -0.082101806 56046
1 0.164338537 35945
-1 0 14616
-1 -0.410172272 191044
1 0.082372323 7904
1 -0.329218107 27274
1 0.330305533 98514
-1 -0.24691358 99294
-1 -0.082508251 38140
-1 -0.165152766 18756
;
run;

proc summary data=tem;
   class x;
   var r v;
   ways 1;
   output out=out(drop=_type_) sum=;
run;

proc print data=out;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2004-7-22 09:36:00 | 只看该作者

use sql

data tem;
input x r v;
cards;
1 0.164609053 193128
1 0 6090
1 0.164338537 15220
-1 0 29856
-1 -0.082034454 163960
1 -0.082101806 56046
1 0.164338537 35945
-1 0 14616
-1 -0.410172272 191044
1 0.082372323 7904
1 -0.329218107 27274
1 0.330305533 98514
-1 -0.24691358 99294
-1 -0.082508251 38140
-1 -0.165152766 18756
;
proc sql;
select x, sum(r) as r, sum(v) as v
from tem
group by x;
quit;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2004-7-22 11:39:49 | 只看该作者

谢谢!

两位老大果然厉害~~先表示感谢!
可能是我的意思表述的不够清楚~~
其实我希望的不是将所有指示变量为1或-1的r,b 求和,最终只形成两行数据。二是这样:前三个连续为1的,求和形成一个观测;后面两个连续为-1的,求和形成第二个观测,再后面两个连续为-1的,求和形成打三个观测.....依次类推,将形成总共6个观测~~~~呵呵,明白我的意思了这次吧!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2004-7-22 13:09:43 | 只看该作者

to lufenglangzi

两位老大回答你了,你应该可以顺着他们思路自己完成呀。
以后提问最好写清楚:
[quote:a8dbc][color=blue:a8dbc]原始格式[/color:a8dbc]:
......
[color=blue:a8dbc]目标格式[/color:a8dbc]:
......
[color=blue:a8dbc]转换逻辑[/color:a8dbc]:
......[/quote:a8dbc]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2004-7-22 16:21:47 | 只看该作者

好热呀

谢谢指点~~
我自己完成?可是我还是不会~~呵呵,他们写的虽然很简单了,但我都看不懂呢~不要笑我!我还是刚刚接触SAS.因为最近在做一个实证,暑假要发表文章,所以自己临时学来不及了!还望各位多多相助,小弟将存谢于心!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2004-7-22 18:54:13 | 只看该作者

a

先前willon的一个帖子"用lag处理另一些数据"或许有些帮助。我找不到了
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2004-7-22 20:06:19 | 只看该作者

i

你不记得,我可记得,我的每一篇自己的帖子在自己的机器上都有备份:

类似于:
data tem;
  input id code$ date yymmdd10.;
  format date yymmdd10.;
  cards;
1 A 2003-04-16
1 B 2003-04-29
2 A 2003-05-12
2 B 2003-06-01
2 C 2003-06-12
;run;

proc sort data=tem;by id descending date;run;

data tem;
set tem;
format lag_date yymmdd10.;
by id;
lag_date=lag(date);
if code='A' and lag(code)='B'  then duration=lag_date-date;
drop lag_date;
run;

proc sort data=tem;by id date;run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2004-7-23 08:59:45 | 只看该作者

Re:

data tem;
input x r v;
cards;
1 0.164609053 193128
1 0 6090
1 0.164338537 15220
-1 0 29856
-1 -0.082034454 163960
1 -0.082101806 56046
1 0.164338537 35945
-1 0 14616
-1 -0.410172272 191044
1 0.082372323 7904
1 -0.329218107 27274
1 0.330305533 98514
-1 -0.24691358 99294
-1 -0.082508251 38140
-1 -0.165152766 18756
;
run;

proc summary data=tem;
by x notsorted;
var r v;  
output out=out(drop=_type_) sum=;
run;

proc print data=out;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2004-7-23 09:30:31 | 只看该作者

:(

老大,我想要的结果是这样的:
1  (连续几个r之和) (连续几个v之和)
-1 (连续几个r之和) (连续几个v之和)
1  (连续几个r之和) (连续几个v之和)
-1 (连续几个r之和) (连续几个v之和)
1  (连续几个r之和) (连续几个v之和)
-1 (连续几个r之和) (连续几个v之和)
willon 给我的程序,我修改后得不出想要的结果~也许是我改错了!
敬请好人做到底,给我一个现成的程序吧,得到程序才是万里长征第一步,接下来我还有好多事要做!帮帮我!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-1-10 19:19 , Processed in 0.414123 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表