weimulu 发表于 2016-5-26 21:34
求代码。。。
举例构建SBM和HML。先分组,每一个date下面,所有股票按照size*B/M分成2*3共六组。proc rank data=all_factors out=size groups=2;
by qtr;
ranks p1;
var size;
run;
proc sort data=size;
by qtr p1;
run;
%macro cons(var,name);
proc rank data=size out=size_&var groups=3;
by qtr p1;
ranks p2;
var &var;
run;
data size_&var;
set size_&var;
group=p1*3+p2+1;
run;
proc sort data=size_&var;
by qtr group;
run;
proc means data=size_&var noprint;
by qtr group;
var ri;
output out=smb_&name mean=mean;
run;
data smb_&name;
set smb_&name;
smb=(lag5(mean)+lag4(mean)+lag3(mean))/3-(lag2(mean)+lag(mean)+mean)/3;
&name=(mean+lag3(mean))/2-(lag2(mean)+lag5(mean))/2;
by qtr group;
if last.qtr;
run;
%mend;
%cons(bm,hml)%cons(op,rmw)%cons(inv,amc)