本體是正確的,你可以做兩個循環。另一種方法是使用原始值訪問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
。
其餘的代碼只是一個額外的做法,一舉爲多個原始變量。
啊我是誤讀了原來的問題。你不需要遍歷61個變量,你只需要遍歷26個變量,然後使用'NewVector(Orig_Integer)'賦值。 –
是的,謝謝你的作品! – Larissa