Макрос SPSS для автоматизации последовательных ссылок на переменные - PullRequest
2 голосов
/ 17 февраля 2012

Мне было трудно заставить простой цикл работать в SPSS, который не основан на переменных.

В двух словах хочу написать

!sequentialVars varStr=/Var/ i=/20/.

или аналогичный и получите: Var1 Var2 Var3 Var4 Var5 ... Var19 Var20 поместить в cTable или куда-либо еще, что принимает строку имен переменных.

В псевдо VB это будет:

varString = "AnyVarName"
for i=1 to 20
  newVarList = concatenate(newVarList," ",varString, i)
next i

Я даже не могу отобразить i в цикле SPSS, не говоря уже о его объединении.

Спасибо!

1 Ответ

1 голос
/ 18 февраля 2012

Пример ниже демонстрирует создание списка переменных внутри макроса.Он выполняет циклическое переключение от 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.

Я могу придумать способ перебрать буквы (по крайней мере, через начальные буквы алфавита), хотя, надеюсь, этого достаточно.1006 *

...