SPSS将来自多个变量的变量数据重新编码为布尔变量

时间:2016-07-04 08:31:26

标签: loops variables if-statement spss recode

我有26个变量,每个变量都包含1到61之间的数字。我希望每个案例为1,每个案例为2等,新变量中的数字为1。如果没有1,则变量应包含2。 所以26个变量的数据如下: 1 15 28 39 46 1 12等。

我想要61个变量: 1 2 1 2 2 1等。

我一直在阅读有关创建矢量,循环,如果是等等但我无法找到正确的编码方式。我所做的只是创建61个变量并编写

如果V1 = 1或V2 = 1或(等到V26)。

重新编码newV1 = 1。

结束如果。

EXE。

**对所有61个变量重复此操作。

将newV1重新编码为newV61(缺失= 2)。

所以这是很多代码,而且与我的想象相去甚远。

任何可以帮我解决这个问题的人?非常感谢您的帮助!

3 个答案:

答案 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).

有点痛苦,因为你需要写出所有存根的原始VECTOR命令,但是你可以将它复制粘贴到DO REPEAT子命令中(或者为你做一个宏)。

为了更简单的说明,如果我们有原始变量,比如A,可以采用1到61之间的整数值,并且我们想要扩展到我们的61个虚拟变量,那么我们将制作一个矢量,然后访问该向量中的位置。

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

对于A = 10的记录,此处DummyVec10将等于1,并且所有其他DummyVec变量默认仍会丢失。无需对{61}值使用DO IF

其余的代码只是为了多个原始变量一次性地执行它。

答案 1 :(得分: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).

答案 2 :(得分:0)

你需要一个嵌套循环:两个循环 - 一个外部和一个内部。