我的数据是一组列,如下:
gvkey date div price
1166 19970429 0 25.6
1166 19970502 0 26
1166 19970505 0 25.9
1166 19970506 0 22.1
1166 19970507 0 19
1166 19970509 0 20.4
1166 19970512 0 21.4
1166 19970513 0 21.7
1166 19970514 0 21.7
1166 19970515 0 21.1
1166 19970516 0 21.5
1166 19970520 0 21
1166 19970521 0 21.8
1166 19970522 0 22.2
1166 19970523 0 22.7
1166 19970526 0 23.9
1166 19970527 0 24
1166 19970528 0 24.2
1166 19970529 0 24.3
1166 19970530 0 23.7 在excel中,我只需添加一列就可以计算出5月份的收益,该列计算的是每日R万亿((价格+ div)/lag价格)。然后,我添加一个1+r万亿的列,它将今天的每日r万亿乘以前一行1+值。当然,在这一时期的第一天,1+r万亿=每日r万亿。
在excel中,我计算了5月30的0.925781和那个月的-0.07422。我怎么才能让SAS为我做这件事?谢谢你的帮忙!
发布于 2016-02-01 01:18:46
试试这个:
data want;
set have;
format rtn crtn percent12.4;
retain crtn 1;
rtn = (price + div)/lag(price) - 1;
crtn = (1 + crtn) * (1 + sum(rtn,0)) - 1;
run;这将按照您的描述计算返回rtn。
我们创建一个起始值为1的累积返回crtn。RETAIN告诉SAS在行之间保留此变量的值。然后我们在每一行上更新它。
sum(rtn,0) = rtn + 0。在第一行,RTN将为null,但SUM()函数将忽略该null并返回0。
编辑:询问关于每年重新设置累积收益的评论。这假设变量fyear位于数据集中,并且数据继续按照正确的顺序排序。
data want;
set have;
by fyear;
format rtn crtn percent12.4;
retain crtn 1;
if first.fyear then do; /*Check for the start of a new BY group*/
crtn = 1;
end;
rtn = (price + div)/lag(price) - 1;
crtn = (1 + crtn) * (1 + sum(rtn,0)) - 1;
run;https://stackoverflow.com/questions/35119780
复制相似问题