noumenal 是正确的,你可以用两个循环来做。不过,另一种方法是VECTOR
使用原始值访问,将其写入 1,并将所有其他值设置为零。
为了说明,首先我制作了一些名为X1 to X4
.
*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).
这有点痛苦,至于原始的 VECTOR 命令,您需要写出所有存根,但是您可以将其复制粘贴到 DO REPEAT 子命令中(或制作一个宏来为您完成)。
为了更简单的说明,如果我们有我们的原始变量,比如A
,它可以取 1 到 61 之间的整数值,并且我们想扩展为 61 个虚拟变量,然后我们将创建一个向量,然后访问其中的位置向量。
VECTOR DummyVec(61,F1.0).
COMPUTE DummyVec(A) = 1.
对于一个记录,如果A = 10
,那么这里DummyVec10
将等于 1,并且所有其他DummyVec
变量仍将默认由系统丢失。无需使用DO IF
61 个值。
其余的代码只是额外的,可以一次性完成多个原始变量。