SPSS语法 - 基于3个变量的新变量

时间:2017-01-09 16:41:59

标签: syntax spss

我需要根据3个变量创建一个新变量。

如果有人对3个变量中的任何一个编码为1,则它们在新变量

中编码为1

如果他们不对任何变量编码1,但对3个变量中的任何一个编码为2,则在新变量中编码为2

其他所有内容都编码为99

在语法中,我把它写成:

IF (Keep_Any=1 OR Find_Any=1 OR Improve_Any=1) Keep_Find_Improve=1.
IF ((Keep_Find_Improve~= 1) & (Keep_Any=2 | Find_Any=2 | Improve_Any=2)) Keep_Find_Improve=2.
IF (Keep_Find_Improve~=1 & Keep_Find_Improve~=2) Keep_Find_Improve=99.
EXECUTE.

但是,第一部分正确识别编码为1的案例,但其余语法不起作用。尽管使用了一些在其他变量上使用完全相同逻辑的语法,但这仍然存在:

COMPUTE Keep_Any= Q9a_recoded = 1 | Q9b_recoded = 1 | Q9c_recoded = 1.
EXECUTE.

IF (Q9A_recoded=1 OR Q9B_recoded=1 OR Q9C_recoded=1) Keep_Any=1. 
IF ((Keep_Any~=1) & (Q9A_recoded= 2 OR Q9B_recoded=2 OR Q9C_recoded=2)) Keep_Any=2.
IF (Keep_Any~=1 & Keep_Any~=2) Keep_Any=99.
EXECUTE.

有没有人知道为什么会发生这种情况以及如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

尝试:

COMPUTE Target1=99.
COMPUTE Target1=ANY(2, V1, V2, V3).
COMPUTE Target1=ANY(1, V1, V2, V3).

或者更好(更高效,即使有更多行代码)

DO IF ANY(1, V1, V2, V3)=1.
   COMPUTE Target2= 1.
ELSE IF ANY(2, V1, V2, V3)=1.
  COMPUTE Target2 = 2.
ELSE.
  COMPUTE Target2=99.
END IF.

答案 1 :(得分:0)

您的语法不起作用的原因是您使用的第二个条件:
IF ((Keep_Find_Improve~= 1) & ...
如果未满足第一个条件,Keep_Find_Improve仍然缺失,因此不符合~=1的条件。 同样的事情发生在IF (Keep_Any~=1 & Keep_Any~=2)之后。 因此,您不应该将Keep_Find_Improve与1或2进行比较,您应该检查它是否已收到值或是否仍然缺失:

IF (Keep_Any=1 OR Find_Any=1 OR Improve_Any=1) Keep_Find_Improve=1.
IF (missing(Keep_Find_Improve) & (Keep_Any=2 | Find_Any=2 | Improve_Any=2)) Keep_Find_Improve=2.
IF missing(Keep_Find_Improve) Keep_Find_Improve=99.
* alternatively: recode Keep_Find_Improve(miss=99).
EXECUTE.

所有这些,我建议您使用@JigneshSutar建议的更高级的代码。

相关问题