13# wdxmahone
测试一下
data a;
input stkcd $ date $10. price mark;
cards;
00 2009-01-02 12.01 0
00 2009-01-03 12.03 1
00 2009-01-06 12.00 1
00 2009-01-07 11.56 0
00 2009-01-08 11.87 0
01 2009-01-02 10.01 0
01 2009-01-03 10.03 1
01 2009-01-06 10.00 0
01 2009-01-07 10.56 1
01 2009-01-08 10.87 0
;
run;
proc sort data=a out=b;
by stkcd decending date;
run;
%macro _lag(n=4);
%do i=1 %to &n;
lag_a_&i=lag&i(price);
if lag&i(stkcd)=stkcd then a_&i=lag_a_&i;
%end;
%mend _lag;
data c1;
set a;
%_lag(n=2);
a0=price;
if mark=1;
run;
data c2;
set b;
%_lag(n=2);
if mark=1;
run;
%macro _num(n=4);
%do i=&n %to 1 %by -1;
c1.a_&i,
%end;
%mend _num;
%macro num(n=4);
%do i=1 %to &n;
c2.a_&i as a&i,
%end;
%mend num;
proc sql;
create table c as
select c1.stkcd,c1.date,
%_num(n=2)
c1.a0,
%num(n=2)
c1.mark
from c1 left join c2
on c1.stkcd=c2.stkcd and c1.date=c2.date;
quit;