Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops SPSS将变量数据从多个变量重新编码为布尔变量_Loops_Variables_If Statement_Spss_Recode - Fatal编程技术网

Loops SPSS将变量数据从多个变量重新编码为布尔变量

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

我有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)

因此,这是大量的代码,与我想象中的情况相比,这是一个相当绕道的过程


谁能帮我解决这个问题?非常感谢你的帮助

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

本体是正确的,您可以使用两个循环。另一种方法是使用原始值访问
向量
,将其写为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)
赋值即可。