日收益计算
data r_day (keep=date r_pct r_log label="日收益");
set stoindif.a1a0001;
r_pct=dif(clpr_r)/lag(clpr_r);
r_log=log(clpr_r)-log(lag(clpr_r));
run;
周收益计算
程序一:
data a;
set stoindif.a1a0001;
wd=weekday(date);
dif=dif(wd);
dif2=dif(date);
if (dif<0 and dif^=.)or dif2>=7 then
index=1;else index=0;
data a(keep=date clpr_r index);
set a;
date=lag(date);
clpr_r=lag(clpr_r);
if index=1;
data r_week(keep=date r_pct r_log);
set a;
r_pct=dif(clpr_r)/lag(clpr_r);
r_log=log(clpr_r)-log(lag(clpr_r));
if r_log=. then delete;
run;
程序二:
data b;
set stoindif.a1a0001;
wk=int((date-3)/7+2);
/* wk为周的标号,设定1960年1月1日为第一周。由于1960年1月1日为周五,所以第一周共有三天。注意该周(1960年1月1日到3日)对应日期按SAS的标准分别为0, 1和2(于是(date-3)/7都等于-1)。由此可以理解为什么这样设定表达式*/
proc sort;
by date;
run;
data b;
set b;
last_wk=last.wk;
by wk;
run;
data b(keep=date r_pct1 r_log1);
set b;
if last_wk=1;
r_pct1=dif(clpr)/lag(clpr);
r_log1=log(clpr)-log(lag(clpr));
run;
data c;/*检测程序一和程序二的一致性*/
merge r_week b;
by date;
if r_pct=r_pct1 then aa=1;
else aa=0;/*最后一个不一样*/
run;