我需要根据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.
有没有人知道为什么会发生这种情况以及如何解决这个问题?
答案 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建议的更高级的代码。