2016-07-04 126 views
3

我有26個變量,每個變量都包含從1到61的數字。我想要每個1的情況下,每個情況下2等等數字1在一個新的變量。如果沒有圖1中,變量應該包含2 所以26個變量與像數據: 1 15 28 39 46 1 12等SPSS將變量數據從多個變量重新編碼爲布爾變量

我想61個與變量: 1 2 1 2 2 1等

我一直在閱讀有關創建矢量,循環,做如果等等,但我找不到正確的方式來編碼它。我所做的只是創建61個變量並編寫

如果V1 = 1或V2 = 1或(等到V26),則執行此操作。

recode newV1 = 1。

end if。

exe。

**對所有61個變量重複此操作。

將newV1重新編碼爲newV61(缺失= 2)。

所以這是很多的代碼,並且我想象的可能會有很大的彎路。

任何人都可以幫我解決這個問題嗎?非常感謝您的幫助!

回答

0

您需要一個嵌套循環:兩個循環 - 一個外部循環和一個內部循環。

1

本體是正確的,你可以做兩個循環。另一種方法是使用原始值訪問VECTOR,將其寫爲1,並將所有其他值設置爲零。爲了說明,我首先製作了一些名爲X1 to X4的假數據(4個原始變量,而不是26個)。

*Fake Data. 
SET SEED 10. 
INPUT PROGRAM. 
LOOP Id = 1 TO 20. 
END CASE. 
END LOOP. 
END FILE. 
END INPUT PROGRAM. 
VECTOR X(4,F2.0). 
LOOP #i = 1 TO 4. 
    COMPUTE X(#i) = TRUNC(RV.UNIFORM(1,62)). 
END LOOP. 
EXECUTE. 

現在這段代碼的作用是創建四個向量設置與每個變量一起去,然後使用DO REPEAT實際上指的是VECTOR存根。然後用RECODE蕩起來 - 如果它丟失了,應該編碼的2

VECTOR V1_ V2_ V3_ V4_ (61,F1.0). 
DO REPEAT orig = X1 TO X4 /V = V1_ V2_ V3_ V4_. 
    COMPUTE V(orig) = 1. 
END REPEAT. 
RECODE V1_1 TO V4_61 (SYSMIS = 2). 

這是一個有點痛苦,因爲原始矢量指令,你需要寫出所有存根的,但你可以複製粘貼到DO REPEAT子命令中(或者讓一個宏爲你做)。


對於一個更簡單的例子,如果我們有我們的原始變量,說A,可以取整數值從1到61,而我們要擴大我們的61個虛擬變量,我們會再作矢量,然後訪問該矢量中的位置。

VECTOR DummyVec(61,F1.0). 
COMPUTE DummyVec(A) = 1. 

對於一個記錄,如果A = 10,那麼這裏DummyVec10將等於1,和所有其它DummyVec變量將仍然缺少系統默認。對於61個值,不需要使用DO IF

其餘的代碼只是一個額外的做法,一舉爲多個原始變量。

1

這應做到:

do repeat NewV=NewV1 to NewV61/vl=1 to 61. 
    compute NewV=any(vl,v1 to v26). 
end repeat. 

說明: 這句法將通過值1至61,爲每一個檢查任何變量V1至V26的是否具有價值。如果它們中的任何一個都有,那麼正確的NewV將會得到值1.如果它們都沒有,那麼正確的NewV將會得到0的值。 只要確保v1到v26在文件中連續排序。如果不是,那麼改爲:

compute NewV=any(vl,v1, v2, v3, v4 ..... v26). 
+0

啊我是誤讀了原來的問題。你不需要遍歷61個變量,你只需要遍歷26個變量,然後使用'NewVector(Orig_Integer)'賦值。 –

+0

是的,謝謝你的作品! – Larissa