全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5817 6
2013-01-25

请教:我的数据包括:gvkey datadate yrmth return

gvkey是股票代码,datadate是交易日期,yrmth是交易日期所在的年度和月份,return是股票日收益。

现在我需要对return取lag,要求每支股票每月的第一个交易日lag_return为空。

我这样写的:

proc sort data=r1995;by gvkey yrmth datadate;run;

data r1995;     

set r1995;     

by gvkey yrmth;     

lag_return=lag(daily_return);     

if first.gvkey and first.yrmth then do;         

lag_return=.  ;     

end;run;

为什么取出来不对呢?第二个月的第一天依然取的是上月最后一天的return。请问我哪里写错了!谢谢!


二维码

扫码加我 拉你入群

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

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

全部回复
2013-1-25 16:12:27
if  first.yrmth then do;         

lag_return=.  ;     

end;
二维码

扫码加我 拉你入群

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

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

2013-1-25 16:49:00
pobel 发表于 2013-1-25 16:12
if  first.yrmth then do;         

lag_return=.  ;
谢谢!这次对了!我再理解一下。非常感谢!
二维码

扫码加我 拉你入群

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

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

2013-1-26 01:35:40
以后这种用 retain 这个命令。 别用lag,有if的话不小心写的不对,就lag的跟你想到不一样了。
二维码

扫码加我 拉你入群

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

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

2013-1-26 13:33:59
chenys625 发表于 2013-1-26 01:35
以后这种用 retain 这个命令。 别用lag,有if的话不小心写的不对,就lag的跟你想到不一样了。
谢谢!抽空学习一下retain。
二维码

扫码加我 拉你入群

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

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

2013-1-26 16:50:19
你这里的问题应该是
by a b;
这样by了两个变量后,在用last和first时
只要写最后一个变量就行了,如
last.b
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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