用sas做BSADF,这是我的编程,但是这只是跑一次,我就需要跑好几个小时,我还需要生成数据找临界值,需要跑两千次重复的实验,应该怎么做呀,直接跑感觉电脑都要整坏,有没有大佬提供下思路或者经验!!!可以有偿!/* options nonotes nosource error=1; */
Data a1(label="指数月收益");
Infile 'D:\网站下载\上证月收益.txt' delimiter = '09'x Missover Dsd lrecl=32767 firstobs=2 ;
Format IdxCd $12.;
Format TrdDt YYMMDD10.;
Format ClPr 19.2;
Format IdxMonRet 10.4;
Informat IdxCd $12.;
Informat TrdDt YYMMDD10.;
Informat ClPr 19.2;
Informat IdxMonRet 10.4;
Label IdxCd="指数代码";
Label TrdDt="交易日期";
Label ClPr="收盘价";
Label IdxMonRet="指数月收益率";
Input IdxCd $ TrdDt ClPr IdxMonRet ;
Run;
data a2;
set a1;
format date yymon7.;
num=_n_;/*加一个列数*/
run;
%macro gundong;
%do i=0 %to 229;
%do j=0 %to 229-&i.;
data b1;set a2;if 0+&j.<num<=254-&i.;
keep TrdDt ClPr num;
run;
proc arima data=b1;
identify var=ClPr stationarity=(adf=0);
ods output StationarityTests=s1;
run;quit;
data s2;
set s1;keep Tau ;if _n_ =3;
run;/*提取tau值,第三排*/
proc datasets library=work nolist;
append base=s3 data=s2;
quit;/*合并tau值*/
%end;
proc means data=s3 Max;
var tau;
output out=s4 max=max1;
quit;/*求最大值,提取最大值*/
data _null_;set b1 end=last; if last then do;call symputx("TrdDt1",TrdDt);end;run;
data s5;
set s4;
y=&TrdDt1 ;format y yymmdd10.;keep max1 y;
run;/*data _null_;set b1 end=last; if last then do;call symputx("tau1",tau);end;run;/*把tau变量最后一行的值赋值给tau1宏变量*//*加日期*/
proc datasets library=work nolist;
append base=s6 data=s5;
quit;/*合并tau值*/
proc datasets library=work nolist;
delete s3;
quit;
%end;
%mend gundong;
%gundong;