今日、LinkedIn で非常によく似た質問がありました (回答については、こちらまたは以下を参照してください)。
-すべての日付がデータ内に 1 回だけ存在すると仮定すると、以下の構文は、各日付 + 前の 29 日付の移動年間合計と平均を計算します。
-ある日付までの日数が 29 日未満の場合、これらの新しい変数はこの日付に対して計算されません。(私見、これは誤解を招く情報になるでしょう。)
- 2 つの新しい変数がそれぞれ 1 つの列に表示されますが、必要に応じて、いくつかの追加行を使用して各値を独自の列に入れることができます。
敬具、
ルベン
*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.