我需要获得周期超过(-2,+ 2)天的标准差,而不是(-2,+ 2)观察。我的桌子在下面
date value standard_deviation
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 ...
... ... ...
棘手的部分是每天都有不同数量的观察结果。因此,我不能只使用以下代码
PROC EXPAND DATA=TESTTEST OUT=MOVINGAVERAGE;
CONVERT VAL=AVG / TRANSFORMOUT=(MOVSTD 5);
RUN;
在这种情况下,任何人都可以告诉我如何只包含( - 2,+ 2)天的中心移动标准偏差?
提前致谢!
最佳
答案 0 :(得分:1)
很抱歉这个混乱。以下是我使用proc sql
进行操作的方法。只需使用带有std
聚合函数的子查询和选择所需观察结果的where
子句:
proc sql;
select
h.date,
h.value,
( select std(s.value)
from have s
where h.date between s.date-2 and s.date+2) as stddev
from
have h
;
quit;
如果期间仅应参考表格中存在的天数(而不是所有日历日期),则创建一个计算日期的变量,并使用该变量代替date
变量来选择观察值。< / p>
data have2;
set have;
by date;
if first.date then sort+1;
run;
proc sql;
select
h.date,
h.value,
( select std(s.value)
from have2 s
where h.sort between s.sort-2 and s.sort+2) as stddev
from
have2 h
;
quit;