我正在尝试在SAS中构建中心移动平均线。 我的桌子在下面
date number average
01/01/2015 18 ...
01/01/2015 15 ...
01/01/2015 5 ...
02/01/2015 66 ...
02/01/2015 7 ...
03/01/2015 7 ...
04/01/2015 19 ...
04/01/2015 7 ...
04/01/2015 11 ...
04/01/2015 17 ...
05/01/2015 3 ...
06/01/2015 7 ...
... ... ...
我需要获取周围期间(-2,+ 2)天的平均数, 而不是(-2,+ 2)观察结果
我知道对于居中移动平均线,我可以使用。
convert number=av_number/transformout=(cmovave 3)
但是我们每天都有不同的观察次数。
在这种情况下,任何人都可以告诉我如何仅包含(-2,+ 2)天的居中移动平均线?
提前致谢!
最佳
答案 0 :(得分:2)
@Joe建议汇总到每日水平是正确的方法,但是你必须要小心,你不会每天丢失参赛人数,否则你不会计算出正确的移动平均线。换句话说,您需要根据当天的条目数量来计算每日价值。
我已经采取了3个步骤来计算移动平均线,有可能在2中进行,但我无法看到。
步骤1是计算每日数量的总和和数量。
步骤2是计算两个变量的移动5天总和。
然后,步骤3将总和除以计数,得到加权的5天平均值。
我已添加trim
功能以排除第一个和最后两个记录,显然您可以根据需要添加这些记录。您可能也想删除一些额外的变量。
data have;
input date :ddmmyy10. number;
format date date9.;
datalines;
01/01/2015 18
01/01/2015 15
01/01/2015 5
02/01/2015 66
02/01/2015 7
03/01/2015 7
04/01/2015 19
04/01/2015 7
04/01/2015 11
04/01/2015 17
05/01/2015 3
06/01/2015 7
;
run;
proc summary data=have nway;
class date;
var number;
output out=daily_agg sum=;
run;
proc expand data=daily_agg out=daily_agg_mov_sum;
convert number=tot_number / transformout = (cmovsum 5 trim 2);
convert _freq_=tot_count / transformout = (cmovsum 5 trim 2);
run;
data want;
set daily_agg_mov_sum;
if not missing(tot_number) then av_number = tot_number / tot_count;
run;