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;
你後來問的可能是這樣吧~



雷达卡




京公网安备 11010802022788号







