楼主: 天请
2743 7

求助SAS程序,具体见下文 [推广有奖]

  • 4关注
  • 13粉丝

已卖:413份资源

学科带头人

19%

还不是VIP/贵宾

-

威望
0
论坛币
16674 个
通用积分
404.4730
学术水平
33 点
热心指数
48 点
信用等级
14 点
经验
126 点
帖子
1421
精华
0
在线时间
2484 小时
注册时间
2009-10-6
最后登录
2024-11-24

楼主
天请 发表于 2011-6-13 21:43:12 |AI写论文
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就可以,谢谢啦!凡解决者,必有重奖!

关键词:sas程序 见下文 Reinvestment Investment investmen 求助 程序 SAS 见下文
大道求诸于己,成功在于执着;凭直觉引路,靠实力说话.

沙发
honghejing 发表于 2011-6-14 09:56:17
把output改为put

藤椅
honghejing 发表于 2011-6-14 09:59:54
一般output出来的是数据集,你要想output出来,需要先在data 中定义v1这个数据集可以写成data ex_1 v1;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
天请 + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

板凳
6203479170 发表于 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;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
天请 + 1 + 1 + 1 谢谢你!

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

报纸
天请 发表于 2011-6-14 10:43:47
4# 6203479170 我写INPUT v1的原因是因为系统老说我的V1不在数据集里,所以我就在随便写写,看怎么能够解决这个问题。
另外谢谢你的程序,我刚用sas跑了,没有结果,好像进入了死循环。我待会再试一下。谢谢啦,如果可以的话,肯定会有重奖的哈!
大道求诸于己,成功在于执着;凭直觉引路,靠实力说话.

地板
6203479170 发表于 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的

7
天请 发表于 2011-6-14 11:54:56
6# 6203479170 我验证了一下,现在程序可以运行了,但是结果不对,肯定是有的地方编得不好(应该就是日期那个地方),谢谢你了,我自己再研究一下。我准备奖励你论坛币,但是不知道该怎么弄?你知道吗?
大道求诸于己,成功在于执着;凭直觉引路,靠实力说话.

8
6203479170 发表于 2011-6-14 12:43:37
7# 天请
不必了,相互学习
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
天请 + 1 + 1 + 1 谢谢

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 03:56