全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1844 6
2011-12-01
我有一数据如下
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之和都要算,但是如果前面不足六期,就不用计算
二维码

扫码加我 拉你入群

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

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

全部回复
2011-12-1 18:19:05
二维码

扫码加我 拉你入群

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

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

2011-12-1 18:19:59
二维码

扫码加我 拉你入群

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

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

2011-12-1 18:21:34
Google "SAS + moving average"
二维码

扫码加我 拉你入群

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

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

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

扫码加我 拉你入群

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

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

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;
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群