日收益率、月收益率、年收益率相互转化
(2014-12-03 09:41:23)
标签:
itsas数据整理教育 |
分类: 数据整理 |
dataset 大致如下;
stk
1
.
.
1
2
.
.
2
需要注意的是 每个月的交易日不一样,而且有些股票因为某些原因停牌,可能某些月没有月收益率,这时当missing。
用日收益率计算月收益率的计算公式应该是 monthly return= (1+drtn (day1))*(1+drtn(day2))*....*(1+drtn(last trading day of this month))-1
data a1;
set r_year;
where 1995 <= year(date) <= 2005;
proc print;
run;
proc transpose data=a1 out=a2;
var r_pct;
proc print;
run;
data a5 ;
set bb;
if last_y=1 and 1997<= year(date) <= 2005;
run;
data a6;
retain begin end;
set a5 end=lastobs;
if _n_=1 then begin=clpr;
if lastobs then do;
end=clpr;
output;
end;
data a6(keep=gm);
set a6;
t=2005-1997+1;
gm=(end/begin)**(1/t)-1;
proc print;
run;
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);
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;

加载中…