2012-02-16 55 views
2

我在SPSS中得到一個簡單的循環並不是基於變量,我有一段艱難的時間。SPSS Macro使序列變量引用自動化

概括地說,我想寫

!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 

我甚至不能回顯在SPSS循環的我,更別說拼接吧。

謝謝!

+0

[本文檔](http://szoc.tarstud.hu/upload/szoc_szakirany_programmingwithspsssyntaxandmacros.pdf)在PDF,創建級聯存根和橫幅表格的第130頁上有一個功能上等效的示例。 – 2012-02-17 01:16:55

+0

這將有助於連接,但除非我完全忽略它,否則我似乎無法找到如何首先生成順序變量。這不是「+」部分,而是V1 V2 V3的數量。那麼它也是Va Vb Vc的字母。那有意義嗎? – ARobertson 2012-02-17 20:47:20

+0

好吧,這是有道理的,如果後綴是一個數字,不會太難(字母我不太確定)。我會看看我是否可以快速調出一個例子。大多數不需要+之間的項目是不需要的,因爲人們可以經常使用'VAR1到VAR50'等。 – 2012-02-17 20:57:40

回答

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 2012-02-17 21:52:54

+0

不是它不是@ARobertson。也許如果你明確你的目標,那麼我可以更有幫助。 – 2012-02-17 22:06:05

+0

然後這將工作。謝謝! – ARobertson 2012-02-17 22:16:35