我有一个关于移动平均线的问题。我使用 Proc Expand (cmovave 3),但我想这三天可能是非连续的。我想避免几天之间丢失数据,并仅在相邻的日子使用移动平均线。
有什么办法可以做到这一点吗?如果我想用另一种方式说“我如何选择我的数据集的一部分,其中我有连续时期(天)的值?”。我希望你能给我一些关于这个问题的例子。
使用 Expand 确保您拥有时间序列间隔中的所有值。然后使用数据步骤通过 lagN() 函数计算 ma3。
如果您的数据已经具有正确的时间序列间隔,则跳过 PROC EXPAND 步骤。
data test;
start = "01JAN2013"d;
format date date9.
value best.;
do i=1 to 365;
r = ranuni(1);
value = rannor(1);
date = intnx('weekday',start,i);
dummy=1;
if r > .33 then output;
end;
drop i start r;
run;
proc expand data=test out=test2 to=weekday ;
id date;
var dummy;
run;
data test(drop=dummy);
merge test2 test;
by date;
ma3 = (value + lag(value) + lag2(value))/3;
run;
我使用 DUMMY 变量,以便 EXPAND 将系列转换为 WEEKDAY。然后放下它。