SAS:根据滚动窗口计算标准偏差

时间:2015-06-26 16:50:51

标签: sas

我需要获得周期超过(-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)天的中心移动标准偏差?

提前致谢!

最佳

1 个答案:

答案 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;