2017-04-20 41 views
2

我想對變量組執行某些操作。每個組在名稱中都有一個特定的索引。我不想重複每個組的語法。有沒有辦法動態引用變量名?在SPSS語法中引用動態變量名稱

下面是語法。 207是每組變量的指數。

DO REPEAT aa= M9_207_1 to M9_207_99. 
..... 
END REPEAT. 
EXECUTE. 

回答

1

您可以使用宏來做到這一點。

第一定義宏:

define !MyMacro() 
!do !ndx=201 !to 207 
    DO REPEAT aa= !concat("M9_",!ndx,"_1") to !concat("M9_",!ndx,"_99"). 
    ..... 
    END REPEAT. 
    EXECUTE. 
!doend 
!enddefine. 

然後調用它:

!MyMacro. 

這裏定義將通過索引201,202,203中運行的宏等」。如果您需要指標的更具體的列表,你可以定義宏是這樣的:

define !MyMacro (!pos=!cmdend) 
!do !ndx !in(!1) 
    DO REPEAT aa= !concat("M9_",!ndx,"_1") to !concat("M9_",!ndx,"_99"). 
    ..... 
    END REPEAT. 
    EXECUTE. 
!doend 
!enddefine. 

然後調用它,給指數(你必須去指定每個單獨的指標):

MyMacro 207 311 501 502 503 504 785.

+0

爲什麼要連接!ind? ndx應該不是嗎? – jivko

+0

好的,我試圖運行以下代碼: define!MyMacro(!pos =!cmdend) !do!ndx!in(!1) DO REPEAT aa =!concat(「Q1 _」,!ind,「_ 1」 )to!concat(「Q1 _」,!ind,「_ 5」)。 \t \t \t FREQ aa。 END REPEAT。 EXECUTE。 !doend !enddefine。 !MyMacro'010''123'。 我收到的錯誤: >第34列中的錯誤#6835。文本:, >在宏表達式中,函數名後面沒有左括號。 >停止執行此命令。 >第23列中的錯誤#4508。文本:_ >無法識別的文本出現在DO REPEAT命令中。它會被忽略。 >停止執行此命令。 – jivko

+0

1.你對'!ind'和'!ndx'是否正確 - 我現在糾正了代碼,應該運行得更好 –

0

這聽起來像你可以做一些循環操作。我經常在R中看到這種問題。我認爲同樣的想法也適用於SPSS。通常,我會試試這個:

for i in (1:207) { 
    for j in (1:99) { 
    M9[i,j] = ... 
    certain actions... 
    } 
} 

希望這會有所幫助。