全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
10317 12
2009-09-26
求助:计算移动平均数的问题?

        如有下列数据,怎样按beibie(类别)计算3期移动平均数?
data a;
input leibie $ y @@;
cards;
a 2 a 3 a 5 a 7 a 1 a 4 a 8
b 6 b 4 b 8 b 7 b 2 b 9
c 7 c 3 c 4 c 2 c 6 c 1
;
run;
data b;
set a;
by leibie;
if first.leibie then  y_sum = 0;
y_sum+y;
run;

如果用这句 y3=(y_sum-lag3(y_sum))/3;  那么只有a类的3期移动平均数是对的。
后面类别的头3个都是错的,应该是空值。
由于数据集中的类别比较多(几千个),不好分开。

请教该如何计算? 谢谢!!
二维码

扫码加我 拉你入群

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

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

全部回复
2009-9-26 13:33:32
按你每三个算平均数,那每组前三个不是正好能算一个数么?为什么是每组前三个空,而不是前两个空呢?

data a;
input leibie $ y @@;
n=1;
cards;
a 2 a 3 a 5 a 7 a 1 a 4 a 8
b 6 b 4 b 8 b 7 b 2 b 9
c 7 c 3 c 4 c 2 c 6 c 1
;
run;
proc sql;    /*判断每组至少3个数的,且排序*/
create table b as select * from a group by leibie having count(*)>=3;quit;

data b;
set b;
by leibie;
if first.leibie then  y_sum = 0;
y_sum+y;
y3=(y_sum-lag3(y_sum))/3;
retain m;
m+n;
if first.leibie then m=n;
if m in(1,2) then y3=.;
if m=3 then y3=y_sum/3;
run;
二维码

扫码加我 拉你入群

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

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

2009-9-26 16:31:14
谢谢回复!
按照您的思路完成,谢谢!!!
二维码

扫码加我 拉你入群

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

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

2009-9-28 02:28:20
3# tianlai888

复制代码

如果只是在同一类别里每三个求一次平均数的话。不过moving average应该要更复杂吧,不懂。
二维码

扫码加我 拉你入群

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

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

2012-7-20 09:37:37
二维码

扫码加我 拉你入群

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

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

2012-7-20 11:29:29
PROC EXPAND
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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