Использование макроса для повторения агрегатной команды - PullRequest
1 голос
/ 08 ноября 2019

У меня есть набор данных со столбцами parcomm, subcomm, ccs, prov, data. Я хотел бы иметь совокупный результат данных для первых четырех столбцов. Я использовал код spss, как указано ниже

DEFINE myvars (arg=TOKENS(4)).
aggregate 
/OUTFILE=* MODE=ADDVARIABLES 
/BREAK=!arg
/sum_!arg=sum(data).
!ENDDEFINE.

myvars parcomm subcomm ccs prov.  

Ошибка показывает

Ошибка # 10933 в столбце 2. Текст: parcomm Определение новой переменной в команде AGGREGATE должно бытьзаканчивается косой чертой. Выполнение этой команды останавливается.

Когда я пробовал только один токен, у меня появляется следующая ошибка:

 DEFINE myvars (arg=!TOKENS(1)). 
 aggregate  /OUTFILE=* MODE=ADDVARIABLES  
 /BREAK=!arg   
 /sum_sum=sum(data). 
 !ENDDEFINE. 
 myvars arg=prov.  

Ошибка № 10934 в столбце 48. Текст: prov,Команда AGGREGATE указывает неизвестное имя существующей переменной. Выполнение этой команды останавливается.

Как решить проблему?

1 Ответ

0 голосов
/ 08 ноября 2019

Если я правильно понимаю, то, что вы пытаетесь сделать, - это запускать aggregate с другой переменной разрыва каждый раз, добавляя агрегацию суммы к набору данных. Макрос может помочь перебрать переменные, но чего не хватает в вашем макросе, так это самого цикла. Попробуйте это:

Сначала просто создайте небольшой набор данных для демонстрации:

data list list/parcomm subcomm ccs prov data (5f2).
begin data
1 2 3 4 25
3 2 3 2 33
1 2 3 2 42
4 1 4 1 66
end data.

Теперь следующий макрос перебирает список переменных в вызове макроса и запускает aggregate для каждого изих:

DEFINE myvars (arg=!cmdend).
!do !vr !in(!arg)
aggregate 
/OUTFILE=* MODE=ADDVARIABLES 
/BREAK=!vr
/!concat("sum_",!vr) = sum(data).
!doend
!ENDDEFINE.

myvars arg=parcomm subcomm ccs prov. 
...