全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
6722 11
2011-04-07
悬赏 100 个论坛币 已解决
现有一个大样本,大概1000多只股票的每日收益率序列,现在想首先按照年划分开,在每年中都对所有的股票求两两之间的相关系数,再进行平均,最后生成一个每年所有股票之间平均相关系数的序列。有一个特殊点就是,由于每支股票上市时间不同,所以并不是每年中所有股票数据量都相同。
这个涉及到大量重复计算(1000个股票每年就要计算1000*999/2个相关系数再求平均),可能需要用到宏,小弟实在是不会弄了,求助各位高手帮忙解决,不胜感谢!!

还有其他问题想进一步请教,小弟QQ:58202666,可以详谈。

最佳答案

sugx111 查看完整内容

data a01; input date yymmdd10. name return; cards; 2000/1/1 1 . 2000/1/2 1 . 2000/1/3 1 . 2000/1/4 1 . 2000/1/5 1 . 2000/1/1 2 0.014859308 2000/1/2 2 0.063012298 2000/1/3 2 0.007179052 2000/1/4 2 0.086734856 2000/1/5 2 0.037906291 2000/1/1 3 . 2000/1/2 3 0.076867532 2000/1/3 3 0.042592363 2000/1/4 3 0.05725441 2000/1/5 3 0.081319334 2001/1/1 1 0.059556131 2001/1/2 1 0.015524925 ...
二维码

扫码加我 拉你入群

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

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

全部回复
2011-4-7 16:03:28
data a01;
input date yymmdd10. name  return;
cards;
2000/1/1        1        .
2000/1/2        1        .
2000/1/3        1        .
2000/1/4        1        .
2000/1/5        1        .
2000/1/1        2        0.014859308
2000/1/2        2        0.063012298
2000/1/3        2        0.007179052
2000/1/4        2        0.086734856
2000/1/5        2        0.037906291
2000/1/1        3        .
2000/1/2        3        0.076867532
2000/1/3        3        0.042592363
2000/1/4        3        0.05725441
2000/1/5        3        0.081319334
2001/1/1        1        0.059556131
2001/1/2        1        0.015524925
2001/1/3        1        0.082463549
2001/1/4        1        0.008277367
2001/1/5        1        0.03660365
2001/1/1        2        0.059446039
2001/1/2        2        0.07641222
2001/1/3        2        0.034873288
2001/1/4        2        0.038094796
2001/1/5        2        .
2001/1/1        3        0.017044851
2001/1/2        3        0.083106932
2001/1/3        3        0.026805859
2001/1/4        3        .
2001/1/5        3        .
;
run;
proc sort data=a01; by name; run;
proc transpose data=a01 out=a02;
var return;
by name;
id date;
run;
data a02(drop=_name_);
set a02;
run;
proc transpose data=a02 out=a03;
var name--_14980;
run;
data a04;
set a03;
date=substr(_name_,2,6)*1;
year=year(date);
if _name_ ne "name";
DROP _NAME_;
run;

proc sort data=a04; by year;
/*Pearson Corr>outs*/
proc corr data=a04 outs=corr01; by year;
var col1--col3;
run;

data corr02;
set corr01;
bb=sum(of col1--col3);
if _type_="CORR";
DROP _TYPE_;
RUN;

PROC MEANS DATA=CORR02 noprint;
BY YEAR;
VAR BB;
OUTPUT OUT=MEANS01 SUM=SUM1;run;

DATA A05;
MERGE  A04 MEANS01(KEEP=YEAR SUM1);BY YEAR;
N1=N(OF col1--col3);
CORR=(SUM1-N1)/2; /*Yearly Corr*/
N2=(N1**2-N1)/2;
Ave_CORR=CORR/N2;  /*Avergae Yearly Corr*/
if year=lag(year) then delete;
RUN;

你後來問的可能是這樣吧~
二维码

扫码加我 拉你入群

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

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

2011-4-8 11:31:53
顶一下,望高手指教!
二维码

扫码加我 拉你入群

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

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

2011-4-8 16:08:42
SAS 程序太模块化,可以考虑用EViews的Matrix实现,只需一个程序一次读入完成
二维码

扫码加我 拉你入群

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

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

2011-4-8 23:57:14
PROC CORR
by Year;

PROC TRANSPOSE
by Year;

PROC MEANS;
by Year;
二维码

扫码加我 拉你入群

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

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

2011-4-9 00:07:45
相关系数怎么算呢?有没有具体的数字举例?
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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