2016-07-04 47 views
3

我有26个变量,每个变量都包含从1到61的数字。我想要每个1的情况下,每个情况下2等等数字1在一个新的变量。如果没有图1中,变量应该包含2 所以26个变量与像数据: 1 15 28 39 46 1 12等SPSS将变量数据从多个变量重新编码为布尔变量

我想61个与变量: 1 2 1 2 2 1等

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

如果V1 = 1或V2 = 1或(等到V26),则执行此操作。

recode newV1 = 1。

end if。

exe。

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

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

所以这是很多的代码,并且我想象的可能会有很大的弯路。

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

回答

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

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


对于一个更简单的例子,如果我们有我们的原始变量,说A,可以取整数值从1到61,而我们要扩大我们的61个虚拟变量,我们会再作矢量,然后访问该矢量中的位置。

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

对于一个记录,如果A = 10,那么这里DummyVec10将等于1,和所有其它DummyVec变量将仍然缺少系统默认。对于61个值,不需要使用DO IF

其余的代码只是一个额外的做法,一举为多个原始变量。

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). 
+0

啊我是误读了原来的问题。你不需要遍历61个变量,你只需要遍历26个变量,然后使用'NewVector(Orig_Integer)'赋值。 –

+0

是的,谢谢你的作品! – Larissa