Macro SPSS для автоматизации ссылок на последовательные переменные
Вопрос
Мне было трудно получить простую петлю для работы в SPSS, которая не основана на переменных.
Короче говоря, я хочу написать
!sequentialVars varStr=/Var/ i=/20/.
или аналогично и получить: var1 var2 var3 var4 var5 ... var19 var20, чтобы поместить в Ctable или в любом месте, который принимает ряд имен переменных.
В Pseudo VB это было бы:
varString = "AnyVarName"
for i=1 to 20
newVarList = concatenate(newVarList," ",varString, i)
next i
Я даже не могу повторить обратно I в петле SPSS, не говоря уже о том, чтобы объединить его.
Благодарю вас!
Решение
Пример ниже демонстрирует составление списка переменных в макросе. То, что он делает, переходит через 1 до N и объединяет число на конце текущей переменной (base_i
) Тогда X1 + X2 ....
производится просто добавлением для каждой переменной через петлю. Макро принимает базовую переменную аргументов и количество элементов.
*making filler data frame.
data list free / V1 (F1.0).
begin data
1
3
5
end data.
dataset name input.
*making a vector list.
vector X(5,F1.0).
do repeat X = X1 to X5.
compute X = RV.BERNOULLI(0.5).
end repeat.
*what I want to do essentially.
ctables
/table X1 + X2.
*now to demonstrate looping through list.
DEFINE !loop_ctable (base = !TOKENS(1)
/n = !TOKENS(1))
!DO !I = 1 !TO !n
!IF (!I = 1) !then
!LET !base_stub = !concat(!base,"1")
!ELSE
!LET !base_i = !CONCAT(!base,!I)
!LET !base_stub = !concat(!base_stub," + ",!base_i)
!IFEND
!DOEND
ctables
/table !base_stub.
!ENDDEFINE.
set mprint on.
!loop_ctable base = X n = 5.
Я могу вспомнить способ пройти через буквы (по крайней мере, через начальные буквы алфавита), хотя, надеюсь, этого достаточно.