可以以周为单位,用week(dt)产生周数或intck(‘week’,最早日期,dt),再用i=遍历,每次产生一周的数据,前两个交易日用sort by date vol就可以了,关键是后三个交易日,分析一周中的星期3,4,5,可用用weekday(dt)-1产生1,2,3,4,5.可以借鉴下面这个例子:
data c;
input date name $ vol;
cards;
1 A 40
1 B 100
1 C 50
1 D 200
2 A 40
2 B 80
2 C 120
2 D 20
3 A 40
3 B 100
3 C 50
3 D 200
4 A 100
4 B 80
4 C 50
4 D 20
5 A 30
5 B 10
5 C 50
5 D 50
;
run;
data d;
set c;
vol1=lag(lag(lag(lag(vol))));
vol2=lag(lag(lag(lag(vol1))));
if date in(3,4,5) then do;
vol_sum=vol+vol1+vol2;
end;
else vol_sum=vol;
run;
proc sort data=d;
by date vol_sum;
run;
data e;
set d;
by date;
if last.date;
run;
e便是想要的数据,临时数据产生的较多,你改下覆盖掉。
|