7530 2

SAS:计算移动平均的方法 [推广有奖]

  • 0关注
  • 9粉丝

讲师

75%

还不是VIP/贵宾

-

威望
1
论坛币
-7 个
通用积分
5.0487
学术水平
30 点
热心指数
66 点
信用等级
35 点
经验
45336 点
帖子
202
精华
0
在线时间
443 小时
注册时间
2010-5-10
最后登录
2014-7-22

楼主
论坛数据分析 发表于 2011-1-11 11:49:54 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
方法1:proc expand的用法
出处:http://elek.me/calculate-moving-average-using-proc-expand-in-sas.html

  1. data have;
  2. do group=2 to 6;
  3.   do value=1 to 20 by 3,21,28,29,50;
  4.    output;
  5.   end;
  6. end;
  7. run;
  8. /*1. Backward moving average: five-period
  9. Yt = ( Xt-4 + Xt-3 + Xt-2 + Xt-1 + Xt ) / 5*/
  10. proc expand data=have method=none out=want1(drop=time);
  11. by group notsorted;
  12. convert value=value1 / transform=(movave 5 trimleft 4);
  13. run;
  14. /*2. Forward moving average: five-period
  15. Yt = ( Xt + Xt+1 + Xt+2 + Xt+3 + Xt+4) / 5*/
  16. proc expand data=have method=none out=want2(drop=time);
  17. by group notsorted;
  18. convert value=value2 / transform=(reverse movave 5 reverse trimleft 4);
  19. run;
  20. /*3. Centered moving average:

  21. 3.1 the centered moving time window operator is an odd number, for example, five-period
  22. Yt = ( Xt-2 + Xt-1 + Xt + Xt+1 + Xt+2 ) / 5 */
  23. proc expand data=have method=none out=want3(drop=time);
  24. by group notsorted;
  25. convert value=value3 / transform=(cmovave 5 trim 2);
  26. run;
  27. /*3.2 the centered moving time window operator is an even number, for example, 4-period
  28. 3.2.1 one more lead value than lagged value is included in the time window
  29. Yt = ( Xt-1 + Xt + Xt+1 + Xt+2 ) / 4  */
  30. proc expand data=have method=none out=want4(drop=time);
  31. by group notsorted;
  32. convert value=value4 / transform=(cmovave 4 trimleft 1 trimright 2);
  33. run;
  34. /*3.2.2 one more lagged value than lead value is included in the time window
  35. Yt = ( Xt-2 + Xt-1 + Xt + Xt+1 ) / 4  */
  36. proc expand data=have method=none out=want5(drop=time);
  37. by group notsorted;
  38. convert value=value5 / transform=(reverse cmovave 4 reverse trimleft 2 trimright 1);
  39. run;

  40. /*3.2.3 weighted moving time window operator; the lead value and lagged value are all weighted 0.5
  41. Yt = ( 0.5 * Xt-2 + Xt-1 + Xt + Xt+1 + 0.5 * Xt+2 ) / 4*/
  42. proc expand data=have method=none out=want6(drop=time);
  43. by group notsorted;
  44. convert value=value61 / transform=(cmovave (0.5 1 1 1 0.5) trim 2 *5/4);
  45. run;
复制代码
方法2:
复制代码
  1. %macro move_avg(var,num);
  2. %let lagnum=%eval(&num-1);
  3. (&var
  4. %do i=1 %to &lagnum;
  5. +lag&i(&var)
  6. %end;
  7. )/&num
  8. %mend move_avg;

  9. /*前面5天的ltt均值作为当天的mean,只选取2008年来的数据*/
  10. data r4(where=(m>=(&t1.+1)));
  11. set r3;
  12. aa=%move_avg(ltt,&t1.);/*这个参数可以改动*/
  13. mean=lag(aa);
  14. run;
复制代码
相关帖子:

计算5期移动平均的程序?
本文来自: 人大经济论坛 SAS专版 版,详细出处参考:http://www.pinggu.org/bbs/viewthread.php?tid=930483&page=1&from^^uid=1832606
二维码

扫码加我 拉你入群

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

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

关键词:移动平均 transform calculate operator weighted SAS

老夫聊发少年狂

沙发
kidzhang 发表于 2011-7-21 20:56:24
mark mark~ 1# 论坛数据分析

藤椅
kidzhang 发表于 2011-7-21 22:00:06
mark~ 1# 论坛数据分析

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

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-5 19:38