全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2672 7
2011-06-13
悬赏 1 个论坛币 未解决
题目要求如下:This exercise uses the daily US return data in nyseamex d (date, value-weighted index with dividend reinvestment, value-weighted index without dividend reinvestment, equally weighted index with dividend reinvestment, equally weighted index without dividend reinvestment, consumer price index).
要求计算Vt = rtd的平方加总, where rtd is a daily return in month t.
下面是程序:
data ex;
set sasuser.ex3;
rvwd=vwd/lag(vwd)-1;
rvwx=vwx/lag(vwx)-1;
rewd=ewd/lag(ewd)-1;
rewx=ewx/lag(ewx)-1;
run;
proc print data=ex;
run; (此前是一些数据处理,可以忽略)
data ex_1;
input V1;
set ex;
V1=0;
date1=19260101;
date2=19260131;
date3=19261231;
do date=19260102 to 20091231;
V=V1+rvwd*rvwd;
if date>=date1 & date<=date2 then do;
V1=V;
date=date+1;
end;
if date>date2 then output V1;(此处出现错误,说找不到指定数据集。我个人的看法是现在得到的V的观察值和原数据集不匹配,所以发生错误。但是没法解决)
date1=date1+100;
date2=date2+100;
   if date2> date3 then do;
     date1=date1+8900;

date2=date2+8900;

     date3=date3+10000;
  end;
end;
run;


求助有关上述问题,如何解决这个错误,或者编一个新的程序也可以,只要可以求出Vt就可以,谢谢啦!凡解决者,必有重奖!
二维码

扫码加我 拉你入群

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

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

全部回复
2011-6-14 09:56:17
把output改为put
二维码

扫码加我 拉你入群

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

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

2011-6-14 09:59:54
一般output出来的是数据集,你要想output出来,需要先在data 中定义v1这个数据集可以写成data ex_1 v1;
二维码

扫码加我 拉你入群

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

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

2011-6-14 10:11:07
我不明白你开INPUT V1 这句的用意,开INPUT BUFFER是用来写入外部数据的。另外OUTPUT V1的意思是把该行观测导出到V1数据集上.你的意思是想把V1变量输出吧?
data ex_1 test(keep=v1);
set ex;
V1=0;
date1=19260101;
date2=19260131;
date3=19261231;
do date=19260102 to 20091231;
V=V1+rvwd*rvwd;
if date>=date1 & date<=date2 then do;
V1=V;
date=date+1;
end;
if date>date2 then output test;/*(我把符合条件的观测输出到test dataset中)*/
date1=date1+100;
date2=date2+100;
   if date2> date3 then do;
     date1=date1+8900;

date2=date2+8900;
     date3=date3+10000;
  end;
end;
run;
二维码

扫码加我 拉你入群

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

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

2011-6-14 10:43:47
4# 6203479170 我写INPUT v1的原因是因为系统老说我的V1不在数据集里,所以我就在随便写写,看怎么能够解决这个问题。
另外谢谢你的程序,我刚用sas跑了,没有结果,好像进入了死循环。我待会再试一下。谢谢啦,如果可以的话,肯定会有重奖的哈!
二维码

扫码加我 拉你入群

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

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

2011-6-14 11:05:39
5# 天请
还有,你DO循环的时候19260102 to 20091231 是指从1926年1月2号到2009年12月31号吧?
应该改成do date='02jan1926'd to '31dec2009'd,不然系统会误认为是从数字19260102到数字20091231的
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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