楼主: timedodo
1813 4

[原创博文] sas高手帮忙,倾家荡产报答了!! [推广有奖]

  • 0关注
  • 0粉丝

本科生

4%

还不是VIP/贵宾

-

威望
0
论坛币
95 个
通用积分
0
学术水平
2 点
热心指数
6 点
信用等级
1 点
经验
3960 点
帖子
53
精华
0
在线时间
49 小时
注册时间
2009-8-17
最后登录
2011-6-27

楼主
timedodo 发表于 2010-7-13 16:12:03 |AI写论文
20论坛币
有一个股票数据:
有以下变量:公司 、时间(年月日)  、收益率。其中时间为20070101到2010101.
现在需要计算各个公司在20080101、20070102、20070903这三个日期前10天的平均收益率,也就是这10天的收益率的均值。
应该怎么样编程呢?
一定重谢!
本文来自: 人大经济论坛 详细出处参考:http://www.pinggu.org/bbs/viewthread.php?tid=856843&page=1&from^^uid=1166746
关键词:倾家荡产 thread 人大经济论坛 pinggu Ping 年月日 收益率

回帖推荐

cro_dxy 发表于3楼  查看完整内容

本人发表一点拙见不知对否?显然这个不能直接从每日的收益率来求10日的平均收益率。你需要得到某段日期起始和结束时的总金额才可以来计算平均收益。比如你想得到20080101之前10天内即20071222-20071231的平均收益,你需要得到20071222日早上开盘时每个公司的股票总金额 total1和20071231收盘时的总金额total2,然后(total2-total1)/total1就可以得到这10天的平均收益率了。如果你并不是计算你个人或公司当时在该股票上的收益,那就不 ...

本帖被以下文库推荐

沙发
BraveMadMan 发表于 2010-7-13 16:12:04
  1. data indata;
  2.   input stock ret date date10.;
  3.   format date date8.;
  4.   cards;
  5. 1 -0.1 '23dec07'd
  6. 2 -0.09 '23dec07'd
  7. 1 -0.08 '24dec07'd
  8. 2 -0.07 '24dec07'd
  9. 1 -0.06 '25dec07'd
  10. 2 -0.05 '25dec07'd
  11. 1 -0.04 '23dec06'd
  12. 2 -0.03 '23dec06'd
  13. 1 -0.02 '24dec06'd
  14. 2 -0.01 '24dec06'd
  15. 1 0 '25dec06'd
  16. 2 0.01 '25dec06'd
  17. 1 0.02 '27aug07'd
  18. 2 0.03 '27aug07'd
  19. 1 0.04 '28aug07'd
  20. 2 0.05 '28aug07'd
  21. 1 0.06 '29aug07'd
  22. 2 0.07 '29aug07'd
  23. ;
  24. run;


  25. proc sql;

  26.   create table new as
  27.   select d.stock, d.date, a.ret_avg as avg1 format 6.4,
  28.          b.ret_avg as avg2 format 6.4, c.ret_avg as avg3 format 6.4
  29.   from indata as d,
  30.        (select stock, sum(ret)/count(ret) as ret_avg from indata where 1<INTCK( 'day', date, '1jan08'd)<=10 group by stock) as a,
  31.        (select stock, sum(ret)/count(ret) as ret_avg from indata where 1<INTCK( 'day', date, '2jan07'd)<=10 group by stock) as b,         
  32.        (select stock, sum(ret)/count(ret) as ret_avg from indata where 1<INTCK( 'day', date, '3sep07'd)<=10 group by stock) as c
  33.   where a.stock=b.stock=c.stock=d.stock
  34.   order by stock, date;
  35. quit;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
timedodo + 1 + 1 + 1 学到了intck函数和sql语句!向高手致敬!

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
cro_dxy 发表于 2010-7-13 16:54:27
本人发表一点拙见不知对否?显然这个不能直接从每日的收益率来求10日的平均收益率。你需要得到某段日期起始和结束时的总金额才可以来计算平均收益。比如你想得到20080101之前10天内即20071222-20071231的平均收益,你需要得到20071222日早上开盘时每个公司的股票总金额 total1和20071231收盘时的总金额total2,然后(total2-total1)/total1就可以得到这10天的平均收益率了。如果你并不是计算你个人或公司当时在该股票上的收益,那就不需要考虑当时持有该股票的总数或总金额,而只需要从任何股票软件的数据库中提取当时的股票价格,然后用(price2-price1)/price1就可以了,当然需要提醒的是在那10天内该公司股票不存在送股或分红,那样的话股票价格需要校正一下。希望这个对你有所帮助,谢谢!
已有 2 人评分经验 论坛币 热心指数 收起 理由
bakoll + 3 + 3 精彩帖子
timedodo + 1 谢谢,不过我的目的主要是sas的实现

总评分: 经验 + 3  论坛币 + 3  热心指数 + 1   查看全部评分

板凳
pobel 在职认证  发表于 2010-7-13 17:13:11
数据?平均收益率计算方法?
和谐拯救危机

报纸
suly 发表于 2010-7-13 20:38:18
从CSMAR里取日收益率,前10天的相加再平均就可以了。随便设个变量。用count 命令就可以了

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 02:37