目前我正在試圖創建一個基於傳遞的參數的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 宏表達包括未定義的宏變量或宏操作者 這是不表達內有效。
問題我現在所擁有的:
- 它甚至有可能產生動態的名字呢?我曾嘗試在過去的幾個小時,但在宏觀SPSS「語言」 似乎非常有限 不同的嘗試。
- 有沒有可能通過其他方式來實現這個任務?這似乎很不方便。
請注意,使用Python加載項工作就是可悲的是不是一種選擇。我很感激任何收到的建議。
宏的工作方式並不像這樣 - 您無權訪問任何案例屬性。因此,在運行'COMPUTE name = VALUELABEL(!POS)'時,它會在數據集中創建一個名爲name的變量,但是在任何宏語句中都無法訪問「name」。 Python是最簡單的解決方案,但人們使用hacky解決方案來寫出語法並在Python之前使用'INSERT'是一種選擇。 –
謝謝,我很擔心。通過編寫語法,你是指每個計算命令是否都是單獨的語法文件? 關於Python:你知道如果用python AddIn,我可以直接引用變量的值嗎?說,我可以循環播放內容。一個標籤對象或類似的東西? – DatenBergwerker
以下是寫出文件的示例,http://spsstools.net/de/syntax/462/。我不太明白你對Python的問題是在問什麼 - 但答案可能是肯定的。 Python基本上暴露了對一切的訪問。 –