楼主: 金融考研
1885 6

[原创博文] 要算一个前六个月的收益之和 [推广有奖]

  • 7关注
  • 2粉丝

已卖:31份资源

博士生

31%

还不是VIP/贵宾

-

威望
0
论坛币
170 个
通用积分
0.3000
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
4602 点
帖子
280
精华
0
在线时间
227 小时
注册时间
2008-8-18
最后登录
2016-4-16

楼主
金融考研 在职认证  发表于 2011-12-1 17:34:23 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我有一数据如下
fundcd       date                  return

000001

2010-06-29

-2.8171

000001

2010-06-30

-0.3929

000001

2010-07-29

7.554

000001

2010-08-31

0.4253

000001

2010-09-30

1.0899

000001

2010-10-29

0.429

000001

2010-11-30

-0.9285

000001

2010-12-31

1.5409

000001

2011-01-31

1.2143

000001

2011-02-28

1.2273

000001

2011-03-31

-0.5854

000001

2011-04-29

1.2208

000001

2011-05-31

1.1018

000001

2011-06-30

1.3571

000001

2011-07-29

-0.5352

000001

2011-08-31

-3.1389

000001

2011-09-30

-7.131

000011

2004-09-30

1.4

000011

2004-10-29

-0.789

000011

2004-11-30

0.8946

000011

2004-12-31

-1.1823

000011

2005-01-31

-2.3928

000011

2005-02-28

5.1073

000011

2005-03-31

-3.8873

000011

2005-04-29

3.0334

000011

2005-05-31

-8.0471

000011

2005-06-30

2.4546

000011

2005-07-29

0.8333

000011

2005-08-31

3.8223

000011

2005-09-30

0

000011

2005-10-31

-2.9851

000011

2005-11-30

-1.3333

我的问题是要分别计算各个fundcd前六期return之和,比如要算出2011-05-31的前六期return之和指的就是2010-11-30到2011-04-29的return之和,以此类推每一个时期往前推六期的return之和都要算,但是如果前面不足六期,就不用计算
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:RETURN turn Fund 我的问题 date 收益

沙发
SASRETURN 发表于 2011-12-1 18:19:05

藤椅
SASRETURN 发表于 2011-12-1 18:19:59

板凳
SASRETURN 发表于 2011-12-1 18:21:34
Google "SAS + moving average"

报纸
randywang198110 发表于 2011-12-2 09:49:00
试试下面的程序,其中test1为你要输入的数据集,test2为转换的数据集
proc expand data=test1 out=test2;
     convert  return=teturn_movsum/transformout=(movsum 60);
     by fundcd;
run;

地板
monkeylan 发表于 2011-12-2 16:16:40

/* Sample 3: Compute the moving average within a BY-Group of last n observations. */
/* For the first n-1 observations within the BY-Group, the moving average         */
/* is set to missing.                                                             */

data ds1;
  do patient='A','B','C';
    do month=1 to 7;
      num=int(ranuni(0)*10);
      output;
      end;
    end;
run;

proc sort;
  by patient;
run;

%let n = 4;

data ds2;
  set ds1;
  by patient;
  retain num_sum 0;
  if first.patient then do;
    count=0;
    num_sum=0;
  end;
  count+1;
  last&n=lag&n(num);
  if count gt &n then num_sum=sum(num_sum,num,-last&n);
  else num_sum=sum(num_sum,num);
  if count ge &n then mov_aver=num_sum/&n;
  else mov_aver=.;
run;

7
金融考研 在职认证  发表于 2011-12-5 21:43:30
randywang198110 发表于 2011-12-2 09:49
试试下面的程序,其中test1为你要输入的数据集,test2为转换的数据集
proc expand data=test1 out=test2;
...
你好,这个程序我试了下,发现貌似是把之前所有的收益相加耶

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-5 00:52