首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SAS计算一段时间的返回

使用SAS计算一段时间的返回
EN

Stack Overflow用户
提问于 2016-01-31 21:36:09
回答 1查看 669关注 0票数 1

我的数据是一组列,如下:

代码语言:javascript
复制
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为我做这件事?谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-01 01:18:46

试试这个:

代码语言:javascript
复制
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的累积返回crtnRETAIN告诉SAS在行之间保留此变量的值。然后我们在每一行上更新它。

sum(rtn,0) = rtn + 0。在第一行,RTN将为null,但SUM()函数将忽略该null并返回0。

编辑:询问关于每年重新设置累积收益的评论。这假设变量fyear位于数据集中,并且数据继续按照正确的顺序排序。

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35119780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档