本体是正确的,你可以做两个循环。另一种方法是使用原始值访问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