加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

日收益率、月收益率、年收益率相互转化

(2014-12-03 09:41:23)
标签:

it

sas

数据整理

教育

分类: 数据整理
假设有n(设n=2)只股票2年的日收益率daily return. 计算每只股票这两年每个月的月收益率。
dataset 大致如下;
stk         date              drtn(daily return)
       01/01/2000        xx.xx
       01/02/2000         xx.xx
.
      12/31/2000         xx.xx  

      01/01/2000        xx.xx
       01/02/2000         xx.xx
.
      12/31/2000           xx.xx  

需要注意的是 每个月的交易日不一样,而且有些股票因为某些原因停牌,可能某些月没有月收益率,这时当missing。

用日收益率计算月收益率的计算公式应该是 monthly return= (1+drtn (day1))*(1+drtn(day2))*....*(1+drtn(last trading day of this month))-1


proc sql;
  create table mntRet as 
 select stk, year(date) as year, month(date) as month, exp(sum(log(1+drtn)))-1 as ret_monthly
  from daily
  group by stk, calculated year, calculated month;
quit;


以下是年平均 。。相求日平均 月平均收益率如何编程。求高手
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;


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有