楼主: Leo-Gao
6778 11

[原创博文] 紧急求助SAS程序——大样本重复计算相关系数 [推广有奖]

  • 0关注
  • 0粉丝

已卖:105份资源

本科生

51%

还不是VIP/贵宾

-

威望
0
论坛币
538 个
通用积分
1.3959
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1422 点
帖子
61
精华
0
在线时间
120 小时
注册时间
2006-3-15
最后登录
2025-12-16

楼主
Leo-Gao 发表于 2011-4-7 16:03:27 |AI写论文
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 ...
关键词:sas程序 相关系数 紧急求助 大样本 急求助 收益率 程序 样本 皮尔逊相关系数 偏相关系数 pearson相关系数 相关系数检验 spearman相关系数 复相关系数 相关系数矩阵

本帖被以下文库推荐

沙发
sugx111 发表于 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;

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

藤椅
Leo-Gao 发表于 2011-4-8 11:31:53
顶一下,望高手指教!

板凳
Pockey77 在职认证  发表于 2011-4-8 16:08:42
SAS 程序太模块化,可以考虑用EViews的Matrix实现,只需一个程序一次读入完成

报纸
oloolo 发表于 2011-4-8 23:57:14
PROC CORR
by Year;

PROC TRANSPOSE
by Year;

PROC MEANS;
by Year;

地板
sas_user 发表于 2011-4-9 00:07:45
相关系数怎么算呢?有没有具体的数字举例?

7
Leo-Gao 发表于 2011-4-9 16:16:25
Pockey77 发表于 2011-4-8 16:08
SAS 程序太模块化,可以考虑用EViews的Matrix实现,只需一个程序一次读入完成
谢谢,还是想用SAS解决吧,因为Eviews对大样本的实现更加不熟悉。。。

8
Leo-Gao 发表于 2011-4-9 16:17:54
oloolo 发表于 2011-4-8 23:57
PROC CORR
by Year;

PROC TRANSPOSE
by Year;

PROC MEANS;
by Year;
没看明白,能否详细解释一下。
proc corr是用来计算两变量相关系数的我知道,主要问题是如何在大样本中循环重复计算

9
sugx111 发表于 2011-4-10 03:02:42
data a1;
input date yymmdd10.        a        b        c;
cards;
2000/1/1        .        0.014859308        0.03617068
2000/1/2        .        0.063012298        0.076867532
2000/1/3        .        0.007179052        0.042592363
2000/1/4        .        0.086734856        0.05725441
2000/1/5        .        0.037906291        0.081319334
2001/1/1        0.031449361        0.014580082        0.092891813
2001/1/2        0.023583704        0.010643162        0.091168043
2001/1/3        0.039628419        0.042155738        0.088111299
2001/1/4        0.054179498        0.014139114        0.028002282
2001/1/5        0.012920447        0.050384028        0.047860573
2002/1/1        0.082590022        0.085810682        0.053205728
2002/1/2        0.069241621        0.004420021        0.080349981
2002/1/3        0.047509014        0.055085357        0.05380365
2002/1/4        0.001783385        0.052097529        0.001555157
2002/1/5        0.031695749        0.076591398        0.054887473
;
data a2;
set a1;
year=year(date);

proc sort data=a2; by year;
/*Pearson Corr>outs*/
proc corr data=a2 outs=corr01; by year;
var a--c;
run;

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

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

DATA A3;
MERGE  A2 MEANS01(KEEP=YEAR SUM1);BY YEAR;
N1=N(OF A--C);
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;

試試看!有錯再跟我說~

10
Leo-Gao 发表于 2011-4-10 12:10:17
非常感谢楼上的朋友!!
能上QQ马?有些问题想要请教

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-21 01:02