楼主: peijiamei
8992 10

计算5期移动平均的程序? [推广有奖]

学科带头人

76%

还不是VIP/贵宾

-

威望
3
论坛币
26151 个
通用积分
12.3533
学术水平
217 点
热心指数
343 点
信用等级
210 点
经验
75410 点
帖子
1102
精华
1
在线时间
2016 小时
注册时间
2007-11-15
最后登录
2016-3-21

10论坛币
na
10.1
20.2
30.3
40.4
50.5
60.6
70.7
80.8
90.9
101
111.1
121.2
131.3
141.4
151.5

根据上面的表格求下面的表格。
aa是a的5期移动平均值。
aaa是aa的5期移动平均值。


naaaaaaaaaa
10.1   
20.2   
30.3   
40.4   
50.50.3  
60.60.4  
70.70.5  
80.80.6  
90.90.70.5 
1010.80.6 
111.10.90.7 
121.210.8 
131.31.10.90.7
141.41.210.8
151.51.31.10.9

最佳答案

pobel 查看完整内容

data have; input n a ; datalines; 1 0.1 2 0.2 3 0.3 4 0.4 5 0.5 6 0.6 7 0.7 8 0.8 9 0.9 10 1 11 1.1 12 1.2 13 1.3 14 1.4 15 1.5 ; %macro move_avg(var,num); %let lagnum=%eval(&num-1); (&var %do i=1 %to &lagnum; +lag&i(&var) %end; )/&num %mend move_avg; data wanted; set have; aa=%move_avg(a,5); aaa=%move_avg(aa,5) ...
关键词:移动平均 移动平均值 平均值 程序
我的微博:http://t.sina.com.cn/1087192374
欢迎互相加关注!
沙发
pobel 在职认证  发表于 2010-10-9 12:46:53 |只看作者 |坛友微信交流群
data have;
input n a ;
datalines;
1 0.1
2 0.2
3 0.3
4 0.4
5 0.5
6 0.6
7 0.7
8 0.8
9 0.9
10 1
11 1.1
12 1.2
13 1.3
14 1.4
15 1.5
;


%macro move_avg(var,num);
   %let lagnum=%eval(&num-1);
   (&var   
     %do i=1 %to &lagnum;
       +lag&i(&var)
   %end;
   )/&num
%mend move_avg;


data wanted;
    set have;
aa=%move_avg(a,5);
aaa=%move_avg(aa,5);
aaaa=%move_avg(aaa,5);
run;
已有 1 人评分学术水平 收起 理由
有福有德 + 5 精彩帖子

总评分: 学术水平 + 5   查看全部评分

和谐拯救危机

使用道具

藤椅
soporaeternus 发表于 2010-10-9 13:38:40 |只看作者 |坛友微信交流群
  1. data a;
  2.         do n=1 to 15 by 1;
  3.                 a+0.1;
  4.                 output;       
  5.         end;
  6. run;

  7. %macro Cal(n,x,y);
  8.         array ar_&x(&n)  _temporary_ ;
  9.         do i=1 to &n-1 by 1;
  10.                 ar_&x(i)=ar_&x(i+1);
  11.         end;
  12.         ar_&x(&n)=&x;
  13.         &y=(ar_&x(1)%do i=2 %to &n %by 1;+ar_&x(&i)%end;)/&n;
  14. %mend;

  15. data b;
  16.         set a;
  17.         %CAL(5,a,aa);
  18.         %CAL(5,aa,aaa);
  19.         %CAL(5,aaa,aaaa);
  20.         drop i;
  21. run;
复制代码
已有 2 人评分学术水平 热心指数 收起 理由
xncdww + 1 + 1 观点有启发
peijiamei + 2 + 2 精彩帖子

总评分: 学术水平 + 3  热心指数 + 3   查看全部评分

Let them be hard, but never unjust

使用道具

板凳
shenbaiseshatan 在职认证  发表于 2010-10-9 13:42:39 |只看作者 |坛友微信交流群
学习了,俺也凑凑热闹,刚刚用R做了下
  1. data<-data.frame(n=1:15,v=seq(.1,1.5,by=.1)) #你的原始数据
  2. leng_1<-length(data$n) #原始数据的长度
  3. leng<-5 #移动平均步长
  4. (data2<-unlist(lapply(1:(leng_1-leng+1),function(i) mean(data$v[i+1:leng-1]))))
  5. leng_2<-length(data2)
  6. (data3<-unlist(lapply(1:(leng_2-leng+1),function(i) mean(data2[i+1:leng-1]))))
  7. leng_3<-length(data3)
  8. (data4<-unlist(lapply(1:(leng_3-leng+1),function(i) mean(data3[i+1:leng-1]))))
复制代码
已有 1 人评分热心指数 收起 理由
peijiamei + 3 精彩帖子

总评分: 热心指数 + 3   查看全部评分

胜人者有力,自胜者强!

使用道具

报纸
hopewell 发表于 2010-10-9 16:03:37 |只看作者 |坛友微信交流群
  1. data raw;
  2.     input n a;
  3. datalines;
  4. 1 0.1
  5. 2 0.2
  6. 3 0.3
  7. 4 0.4
  8. 5 0.5
  9. 6 0.6
  10. 7 0.7
  11. 8 0.8
  12. 9 0.9
  13. 10 1
  14. 11 1.1
  15. 12 1.2
  16. 13 1.3
  17. 14 1.4
  18. 15 1.5
  19. ;
  20. /*1*/
  21. data avg1;
  22.     retain sum_aa sum_aaa sum_aaaa;
  23.     set raw;
  24.     sum_aa=sum(sum_aa,a,-lag5(a));
  25.     aa=sum_aa/5;
  26.     sum_aaa=sum(sum_aaa,aa,-lag5(aa));
  27.     aaa=sum_aaa/5;
  28.     sum_aaaa=sum(sum_aaaa,aaa,-lag5(aaa));
  29.     aaaa=sum_aaaa/5;
  30.     select;
  31.         when(_n_ lt 5) call missing(aa,aaa,aaaa);
  32.         when(_n_ lt 9) call missing(aaa,aaaa);
  33.         when(_n_ lt 13) call missing(aaaa);
  34.         otherwise;
  35.     end;
  36.     drop sum_:;
  37. run;
  38. /*2*/
  39. proc expand data=raw out=avg2 method=none;
  40.     id n;
  41.     convert a=aa / transformin=(movave 5);
  42. run;
  43. proc expand data=avg2 out=avg2 method=none;
  44.     id n;
  45.     convert aa=aaa / transformin=(movave 5);
  46. run;
  47. proc expand data=avg2 out=avg2 method=none;
  48.     id n;
  49.     convert aaa=aaaa / transformin=(movave 5);
  50. run;
  51. data avg2;
  52.     length n a aa aaa aaaa 8.;
  53.     set avg2;
  54.     select;
  55.         when(_n_ lt 5) call missing(aa,aaa,aaaa);
  56.         when(_n_ lt 9) call missing(aaa,aaaa);
  57.         when(_n_ lt 13) call missing(aaaa);
  58.         otherwise;
  59.     end;
  60. run;
复制代码
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
爱萌 + 100 + 100 + 5 + 5 SAS中文比赛的部分奖励
jingju11 + 1 + 1 + 1 良好的程序具备可读性和拓展性。expand具备这个条件。

总评分: 经验 + 100  论坛币 + 100  学术水平 + 6  热心指数 + 6  信用等级 + 1   查看全部评分

使用道具

地板
bobguy 发表于 2010-10-9 22:17:25 |只看作者 |坛友微信交流群
peijiamei 发表于 2010-10-9 12:46
na
10.1
20.2
30.3
40.4
50.5
60.6
70.7
80.8
90.9
101
111.1
121.2
131.3
141.4
151.5

根据上面的表格求下面的表格。
aa是a的5期移动平均值。
aaa是aa的5期移动平均值。


naaaaaaaaaa
10.1   
20.2   
30.3   
40.4   
50.50.3  
60.60.4  
70.70.5  
80.80.6  
90.90.70.5 
1010.80.6 
111.10.90.7 
121.210.8 
131.31.10.90.7
141.41.210.8
151.51.31.10.9
I give a simple solution here. You may calculate the aaa and aaaa simularly.

data tmp;
  do a=0.1 to 1.5 by 0.1;
    output;
end;
run;

data tmp2;
  set tmp;
  la0=a; la1=lag1(a); la2=lag2(a); la3=lag3(a); la4=lag4(a);
  if _n_>=5 then aa=sum(a,la1,la2,la3,la4)/n(a,la1,la2,la3,la4);
  keep a aa;
  run;

  proc print; run;

使用道具

7
上官小左 发表于 2010-10-11 22:54:37 |只看作者 |坛友微信交流群
我下下来了~!免费提供大家下载!点击此处下载附件(附件大小:9KB)

使用道具

8
jingju11 发表于 2010-10-13 06:28:39 |只看作者 |坛友微信交流群
5# hopewell
我想具体的算法或许这样,也就是weighted平均数的变化:

  1. proc expand data =raw out =avg2 method =none;
  2.     id n;
  3.     convert a =a / transformout=(movave 5 trimleft 4);
  4.   convert a =aa / transformout=(movave (0.04 0.08 0.12 0.16 0.20 0.16 0.12 0.08 0.04) trimleft 8);
  5.   convert a =aaa / transformout=(movave (0.008 0.024 0.048 0.08 0.12 0.144 0.152 0.144 0.12 0.08 0.048 0.024 0.008) trimleft 12);
  6. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
hopewell + 1 + 1 + 1 好的意见建议

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

使用道具

9
tj0412ymy 发表于 2013-10-18 12:57:07 |只看作者 |坛友微信交流群
请问计算加权移动平均,可否在BASE里写代码实现?而不是调用PROC EXPAND过程。
对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

使用道具

10
hawkscry 发表于 2015-3-23 15:43:53 |只看作者 |坛友微信交流群
mark一下

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 19:02