今天在 LinkedIn 上有一个非常相似的问题(请参阅此处或下面的答案)。
- 假设每个日期在您的数据中只出现一次,下面的语法将计算每个日期 + 前 29 个日期的移动年度总数和平均值。
- 如果在某个日期之前少于 29 天,则不会针对该日期计算这些新变量。(恕我直言,这将是误导性信息。)
- 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.