2016-03-17 30 views
0

目前我正在試圖創建一個基於傳遞的參數的valuelabels動態變量名。目前,我有這樣的事情:SPSS宏 - 生成動態Varnames

COMPUTE counter = 0. 

APPLY DICTIONARY FROM * 
    /SOURCE VARIABLES = V601 
    /TARGET VARIABLES = counter. 

DEFINE !macro1 (!POS !CMDEND). 
STRING name (A20). 
!DO !#i = 1 !TO 62 
    COMPUTE counter = #i 
    !IF (!POS !EQ !i) 
    !THEN 
     COMPUTE name = VALUELABEL(!POS) 
     COMPUTE !CONCAT('wasnot', name) = 1. 
    !ELSE 
     COMPUTE name = VALUELABEL(!counter). 
     COMPUTE !CONCAT('wasnot', name) = 0. 
    !IFEND 
!DOEND 

CROSSTABS v15 by !CONCAT('wasnot', name) /cells = column. 

!ENDDEFINE. 

的想法是,對於V601的每個唯一值一個標誌變量將被創建(例如「wasnotvaluelabel1」)。該變量將分別具有值= 1或0。但是,似乎concat不能按照我的意圖使用。我得到這些錯誤:當一個操作數預期發生POS 宏表達式的末尾:

  • 錯誤#6843在第7欄文字! 停止執行此命令。

  • 錯誤#6846在第7欄文本:POS 宏表達包括未定義的宏變量或宏操作者 這是不表達內有效。

  • 錯誤#6836在第12列文本:EQ 在宏表達,操作者不是由操作數之前。

  • 在塔2文本錯誤#6846:THEN 宏表達包括未定義的宏變量或宏操作者 這是不表達內有效。

  • 錯誤#6846在柱28的文本:POS 宏表達包括未定義的宏變量或宏操作者 這是不表達內有效。

問題我現在所擁有的:

  1. 它甚至有可能產生動態的名字呢?我曾嘗試在過去的幾個小時,但在宏觀SPSS「語言」 似乎非常有限 不同的嘗試。
  2. 有沒有可能通過其他方式來實現這個任務?這似乎很不方便。

請注意,使用Python加載項工作就是可悲的是不是一種選擇。我很感激任何收到的建議。

+0

宏的工作方式並不像這樣 - 您無權訪問任何案例屬性。因此,在運行'COMPUTE name = VALUELABEL(!POS)'時,它會在數據集中創建一個名爲name的變量,但是在任何宏語句中都無法訪問「name」。 Python是最簡單的解決方案,但人們使用hacky解決方案來寫出語法並在Python之前使用'INSERT'是一種選擇。 –

+0

謝謝,我很擔心。通過編寫語法,你是指每個計算命令是否都是單獨的語法文件? 關於Python:你知道如果用python AddIn,我可以直接引用變量的值嗎?說,我可以循環播放內容。一個標籤對象或類似的東西? – DatenBergwerker

+0

以下是寫出文件的示例,http://spsstools.net/de/syntax/462/。我不太明白你對Python的問題是在問什麼 - 但答案可能是肯定的。 Python基本上暴露了對一切的訪問。 –

回答

1

有一個擴展命令,SPSSINC CREATE假人會自動創建所有這些虛擬變量。它在變換菜單上。它是用Python實現的。

使用Python,你可以很容易地讀取數據的情況下,做其它更多地方。

0

感謝所有幫助。最後,我使用Outfile生成了新的語法。