2017-04-10 128 views
1

以一個例如當我們有一系列10個分類變量var1, var2,..., var10我們創建從這些變量的每5個虛擬變量,其值爲從1至5。SPSS的功能類似於Stata中的雙/複合引號嗎?

的。例如,從var1我們生成dumvar1_1,..., dumvar1_5。如果原始變量具有虛擬順序的對應值,虛擬機將接收值1。那就是,dumvar1_1 = 1 if var1 = 1;否則爲dumvar1_1 = 0。同樣,dumvar1_2 = 1 if var1 = 2; dumvar1_2 = 0否則。與其他假人一樣。

如果我在Stata做什麼,我會做這樣的:

forvalues i = 1(1)10 { 
forvalues j = 1(1)5 { 
generate dumvar`i'_`j' = 0 
replace dumvar`i'_`j' = 1 if var`i' == `j' 
} 
} 

有沒有辦法做同樣的SPSS?

+1

簡單地說,就Stata而言,你所引用的並不是雙複合詞或(所用術語)複合雙引號。它們是左引用和右引號,用於取消引用或評估本地宏。我不是SPSS的用戶,但我懷疑你的問題對於大多數SPSS用戶程序員來說是很有意義的,即使他們也知道Stata,如果你只是發佈一個關於雙循環的問題,那麼這個問題對別人來說會更有用創建指標變量。順便說一句,在Stata中,你可以將內部語句壓縮爲'generate dum \'i'_'''''''''''''''''' –

+0

感謝您澄清這個術語。虛擬/指標變量的創建是我打算做的一半。另一半是基於原始變量以相當有效的方式賦值(如Stata所做的那樣)。由於歷史原因,我正在開發的這個項目繼承了SPSS和Stata,所以我認爲這可能對那些在多個平臺上工作的人有幫助。 – NonSleeper

回答

1

只需使用SPSSINC CREATE DUMMIES擴展命令(與我的V24一起安裝)即可實現您想要的功能。

SPSSINC CREATE DUMMIES VARIABLE=var1 TO var10 
ROOTNAME1=dumvar1 dumvar2 dumvar3 dumvar4 dumvar5 dumvar6 dumvar7 dumvar8 dumvar9 dumvar10 
/OPTIONS ORDER=A USEVALUELABELS=NO USEML=YES OMITFIRST=NO. 

唯一的區別是後腳本的從1到50,而不是重複每1〜5(如果每個var1var10具有所有可能的5個值。)


對於普通的香草SPSS方法,您可以使用宏設施。

DATA LIST FREE/var1 TO var10 (10F1.0). 
BEGIN DATA 
1 2 3 4 5 1 2 3 4 5 
END DATA. 
DATASET NAME Sim. 
EXECUTE. 

DEFINE !MakeDums (Pre = !TOKENS(1) 
       /N = !TOKENS(1) 
       /V = !CMDEND) 
VECTOR V = !V. 
!DO !I = 1 !TO !N 
!LET !VecStub = !CONCAT(!Pre,!I,"_") 
VECTOR !VecStub (5,F1.0). 
COMPUTE !VecStub(V(!I)) = 1. 
!DOEND 
!ENDDEFINE. 

!MakeDums Pre=dumvar N=10 V = var1 TO var10. 
RECODE dumvar1_1 TO dumvar10_5 (SYSMIS = 0). 
EXECUTE. 

您可以在SPSS類似Stata的代碼做什麼做嵌套循環,但你需要首先創建LOOPDO REPEAT語法以外的變量。所以我使用宏設施。

+0

感謝您的解決方案。 – NonSleeper