I don't have SAS on my computer, but this is a sketch, using macro loop.
*Merge Data and create month sequence;
proc sort data=stock; by trdmnt;
proc sort data=otherVariables; by trdmnt;
data data;
merge stock otherVariables; by trdmnt;
year = floor(trdmnt/100);
month = trdmnt - year*100;
mseq = (year-2005)*12 + month;
rirf = ri - rf;
run;
%macro loopit;
* create a base table for saving results;
data _tmp_; set data(where=(stkcd='000001'));
proc reg data=_temp_ outest=outest noprint;
by stkcd;
model rirf = tx1 tx2 tx3;
run;
data outest; set outest(obs=0); mseq=.; run;
* find the first and last month sequence;
proc sql;
select min(mseq), max(mseq) into :minm, :maxm;
%put &minm &maxm;
%do mseq0 = &minm+36 %to &maxm %by 1;
data _temp_; set data(where=(&mseq0-35 <= mseq <= &mseq0));
proc sort data=_temp_; by stkcd;
proc reg data=_temp_ outest=outest0 noprint;
by stkcd;
model rirf = tx1 tx2 tx3;
run;
data outest0; set outest0; mseq=&mseq0;
proc append data=outest0 base=outest; run;
%end;
%mend;
%loopit;
|