有今天LinkedIn(见here或以下的答案)一个非常类似的问题。
- 假设每个日期出现在你的数据只出现一次,下面的语法将计算在每个日期+前29个日期的每年移动总数和平均数。
- 如果前面一些日期少于29日,这些新变量将不会被计算此日期。 (恕我直言,这将是误导性的信息。)
-The 2个新的变数将出现在一列各但有一些额外的行如果需要,你可以把每个值到自己的列。
亲切的问候,
鲁
*Generate test data.
set seed 1.
input program.
loop #=1 to 60.
if #=1 date=date.dmy(21,11,2012).
if #>1 date=datesum(lag(date),1,"days").
end case.
end loop.
end file.
end inp pro.
if $casenum=1 price=100.
if $casenum ne 1 price=lag(price)+tru(rv.nor(0,5)).
for date(edate10).
exe.
*Compute moving total + average.
comp moving_total_30=price.
do rep dif=1 to 29.
comp moving_total_30=moving_total_30+lag(price,dif).
end rep.
comp moving_average_30=moving_total_30/30.
exe.
也FYI有一种叫做CREATE基本上执行此命令(你可以做CSUM,居中移动平均,差别等)。对于这个例子,它将是'CREATE moving_average_30 = PMA(价格,30).' –