Loops SPSS将变量数据从多个变量重新编码为布尔变量
我有26个变量,每个变量都包含从1到61的数字。对于每一个1,每一个2,等等,我想要一个新变量中的数字1。如果没有1,则变量应包含2。 因此,26个变量的数据如下: 115283946112等 我想要61个变量,包括: 1、2、1等 我一直在读关于创建向量、循环、do if’s等的书,但我找不到正确的编码方法。我所做的只是创建61个变量并编写 如果V1=1或V2=1或(等至V26),则执行此操作 重新编码newV1=1 结束如果 exe **对所有61个变量重复此操作 将newV1重新编码为newV61(缺失=2) 因此,这是大量的代码,与我想象中的情况相比,这是一个相当绕道的过程Loops SPSS将变量数据从多个变量重新编码为布尔变量,loops,variables,if-statement,spss,recode,Loops,Variables,If Statement,Spss,Recode,我有26个变量,每个变量都包含从1到61的数字。对于每一个1,每一个2,等等,我想要一个新变量中的数字1。如果没有1,则变量应包含2。 因此,26个变量的数据如下: 115283946112等 我想要61个变量,包括: 1、2、1等 我一直在读关于创建向量、循环、do if’s等的书,但我找不到正确的编码方法。我所做的只是创建61个变量并编写 如果V1=1或V2=1或(等至V26),则执行此操作 重新编码newV1=1 结束如果 exe **对所有61个变量重复此操作 将newV1重新编码为ne
谁能帮我解决这个问题?非常感谢你的帮助 您需要一个嵌套循环:两个循环-一个外部循环和一个内部循环。本体是正确的,您可以使用两个循环。另一种方法是使用原始值访问
向量
,将其写为1,并将所有其他值设置为零
为了举例说明,首先我制作了一些名为X1到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
实际引用向量
存根。然后以重新编码
结束-如果缺少,则应将其编码为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
代码的其余部分只是额外的,可以一次完成多个原始变量。这应该可以:
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).
啊,我误解了原来的问题。不需要循环61个变量,只需循环26个变量,然后使用
NewVector(Orig\u Integer)
赋值即可。