SAS中文论坛

标题: 帮我用SAS编个小程序好吗? [打印本页]

作者: shiyiming    时间: 2004-7-21 16:55
标题: 帮我用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]
作者: shiyiming    时间: 2004-7-22 08:12
标题: 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;
作者: shiyiming    时间: 2004-7-22 09:36
标题: 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;
作者: shiyiming    时间: 2004-7-22 11:39
标题: 谢谢!
两位老大果然厉害~~先表示感谢!
可能是我的意思表述的不够清楚~~
其实我希望的不是将所有指示变量为1或-1的r,b 求和,最终只形成两行数据。二是这样:前三个连续为1的,求和形成一个观测;后面两个连续为-1的,求和形成第二个观测,再后面两个连续为-1的,求和形成打三个观测.....依次类推,将形成总共6个观测~~~~呵呵,明白我的意思了这次吧!
作者: shiyiming    时间: 2004-7-22 13:09
标题: to lufenglangzi
两位老大回答你了,你应该可以顺着他们思路自己完成呀。
以后提问最好写清楚:
[quote:a8dbc][color=blue:a8dbc]原始格式[/color:a8dbc]:
......
[color=blue:a8dbc]目标格式[/color:a8dbc]:
......
[color=blue:a8dbc]转换逻辑[/color:a8dbc]:
......[/quote:a8dbc]
作者: shiyiming    时间: 2004-7-22 16:21
标题: 好热呀
谢谢指点~~
我自己完成?可是我还是不会~~呵呵,他们写的虽然很简单了,但我都看不懂呢~不要笑我!我还是刚刚接触SAS.因为最近在做一个实证,暑假要发表文章,所以自己临时学来不及了!还望各位多多相助,小弟将存谢于心!
作者: shiyiming    时间: 2004-7-22 18:54
标题: a
先前willon的一个帖子"用lag处理另一些数据"或许有些帮助。我找不到了
作者: shiyiming    时间: 2004-7-22 20:06
标题: 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;
作者: shiyiming    时间: 2004-7-23 08:59
标题: 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;
作者: shiyiming    时间: 2004-7-23 09:30
标题: :(
老大,我想要的结果是这样的:
1  (连续几个r之和) (连续几个v之和)
-1 (连续几个r之和) (连续几个v之和)
1  (连续几个r之和) (连续几个v之和)
-1 (连续几个r之和) (连续几个v之和)
1  (连续几个r之和) (连续几个v之和)
-1 (连续几个r之和) (连续几个v之和)
willon 给我的程序,我修改后得不出想要的结果~也许是我改错了!
敬请好人做到底,给我一个现成的程序吧,得到程序才是万里长征第一步,接下来我还有好多事要做!帮帮我!!!
作者: shiyiming    时间: 2004-7-23 09:46
标题: 结果在数据sumrc里
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;
data new;
set tem;
if _n_>1 & lag(x)^=x then do;
flag+1;
end;
run;
proc means data=new ;
var r v;
id x;
by flag;
output out=sumrc sum=sumr sumv;
run;
data sumrc;
set sumrc;
drop _type_ _freq_ flag;
run;
<!-- s:shock: --><img src="{SMILIES_PATH}/icon_eek.gif" alt=":shock:" title="Shocked" /><!-- s:shock: -->
作者: shiyiming    时间: 2004-7-23 10:22
标题: ;)
谢谢各位热情相助~原来jiagangw已经给出了程序,因为是在第二页,开始没有看到,不好意思!jiagangw的程序给出的结果非常理想!只是又碰到了一个问题,得到了结果,我不知道怎么将数据转换成excel表格的形式!?
作者: shiyiming    时间: 2004-7-23 18:56
标题: Re:
[quote=&quot;jiagangw&quot;:6ac31]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 [size=200:6ac31]notsorted[/size:6ac31];
var r v;  
output out=out(drop=_type_) sum=;
run;

proc print data=out;
run;[/quote:6ac31]
又学了一招, by variable notsorted;
作者: shiyiming    时间: 2004-7-25 08:16
标题: 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 EXPORT DATA= out
            OUTFILE= "D:\temp\out.xls"
            DBMS=EXCEL2000 REPLACE;
RUN;




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2