全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4803 4
2009-11-23
我要将每只股票的3年累加起来,从而计算每只股票的3年的累计收益率。
请问在SAS中应该怎么编写这个程序?
比如有year id x,要y等于
year  id x y
1999 1  2 .
2000 1  3 .
2001 1  4 (2+3+4)
2002 1  2 (3+4+2)
2003 1  2 (4+2+2)
1990 2  3 .
1991 2  4 .
1992 2  3 (3+4+3)
1993 2  3 (4+3+3)
1994 2  2 (3+3+2)
1995 2  4 (3+2+4)
1996 2  3 (2+4+3)
...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2009-11-23 16:25:00
可以这样做,首先产生虚的变量(我是指在计算过程中生产,但是不需要保留的变量,然后用条件替换的办法解决。
例如
y   id  x   dy             y=2+3+4 iff year=2001
         2  2+3+4      
         3  2+3+4
         4  2+3+4    2+3+4
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2009-11-23 16:25:43
其他的依次论推。当然应该建立循环程序,我想应该是很熟练的了吧。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2009-11-23 22:59:19
data a;input year  id x ;
y=x+lag(x)+lag2(x);
cards;
1999 1  2
2000 1  3
2001 1  4
2002 1  2
2003 1  2
1990 2  3
1991 2  4
1992 2  3
1993 2  3
1994 2  2
1995 2  4
1996 2  3
;run;

data b;set a; by id year;if first.id then m=0;m+1;
if m<=2 then y=.;drop m;run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2009-11-25 22:27:07
This is better and clear.

HTH

data a;
input year  id x ;
cards;
1999 1  2
2000 1  3
2001 1  4
2002 1  2
2003 1  2
1990 2  3
1991 2  4
1992 2  3
1993 2  3
1994 2  2
1995 2  4
1996 2  3
;

data b;
   set a;
   by id year;
   if first.id then m=0;
   m+1;
   x1=lag(x);
   x2=lag2(x);
   if m>=3  then y=sum(x, x1, x2);
   else y=.;
drop m;
run;

proc print; run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群