Переменный список скользящих средних

Я пытаюсь рассчитать скользящие средние за 30 дней (предыдущие скользящие средние), используя SPSS 20 примерно для 1200 биржевых тикеров. Я хотел бы использовать цикл, например:

  1. Рассчитайте 30-дневную скользящую среднюю для тикера, скажем, AAAA или 0001, и сохраните ее как MA30AAAA или MA300001.
  2. Возьмите другой тикер, скажем, AAAB или 0002, и сделайте, как указано выше.
  3. Продолжается до тех пор, пока не будут захвачены все тикеры и рассчитана MA, сохраненная в новых столбцах.

Как вы думаете, я могу разработать синтаксис SPSS для этого.

Если я попробую следующее, я получу предупреждения об ошибках. Пожалуйста, не могли бы вы помочь мне получить достаточно хорошо структурированный синтаксис для выполнения моей работы.


person John Mecdonald    schedule 18.11.2012    source источник


Ответы (1)


Сегодня в LinkedIn был очень похожий вопрос (см. 0-b-ttl&goback=.anb_1879554_%2a2_%2a1_%2a1_%2a1_%2a1_%2a1.gmp_1879554" rel="nofollow">здесь или ниже для ответа).

-Предполагая, что каждая дата присутствует в ваших данных ровно один раз, приведенный ниже синтаксис будет вычислять скользящие годовые итоги и средние значения за каждую дату + предыдущие 29 дат.

-Если какой-либо дате предшествовало менее 29 дней, эти новые переменные не будут рассчитаны для этой даты. (ИМХО, это будет вводящая в заблуждение информация.)

- Две новые переменные появятся в одном столбце каждая, но с несколькими дополнительными строками вы можете поместить каждое значение в отдельный столбец, если хотите.

С уважением,

Рубен

*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.
person RubenGeert    schedule 19.11.2012
comment
Кроме того, к сведению, есть команда CREATE, которая, по сути, делает это (и вы можете выполнять csum, центрированные скользящие средние, разницу и т. Д.). Для этого примера это будет CREATE moving_average_30 = PMA(price,30). - person Andy W; 11.12.2012