2012-02-16 4 views
2

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

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

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

или аналогичный и получаем: Var1 Переменная2 Var3 var4 Var5 ... Var19 Var20 положить в CTABLE или где-нибудь еще, что принимает строку переменной имена.

В псевдо VB было бы:

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

Я не могу даже эхо назад я в петле SPSS, не говоря уже о его конкатенации.

Спасибо!

+0

[Этот документ] (http://szoc.tarstud.hu/upload/szoc_szakirany_programmingwithspsssntaxandmacros.pdf) имеет функционально эквивалентный пример на стр. 130 PDF, Создание объединенных таблиц заглушек и баннеров. –

+0

Это поможет с конкатенацией, но если я не полностью ее упустил, я не могу найти способ генерации последовательных переменных в первую очередь. Это не «+» часть, а номера V1 V2 V3. Тогда это также буквы Va Vb Vc. Имеет ли это смысл? – ARobertson

+0

Хорошо, что имеет смысл, если постфикс - это число, которое не было бы слишком жестким (буквы я не уверен). Я посмотрю, смогу ли я быстро поднять пример. Большинство элементов, которые не нуждаются в + между ними, не нужны, так как часто можно использовать 'VAR1 to VAR50' и т. Д. –

ответ

1

Приведенный ниже пример демонстрирует составление списка переменных внутри макроса. То, что он делает, - это цикл от 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. 

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

+0

Возможно ли, чтобы команда ctables была вне макроса, поэтому я могу использовать ту же команду в разных такие ситуации? CTABLE/TABLE! Loop_ctable base = X n = 5. – ARobertson

+0

Нет, это не @ARobertson. Возможно, если вы уточните свои цели, я больше могу помочь. –

+0

Тогда это сработает. Спасибо! – ARobertson

Смежные вопросы