我需要创建一个基于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.有谁知道为什么会发生这种情况,以及如何修复它?
发布于 2017-01-10 01:05:09
尝试:
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.发布于 2017-01-10 02:37:28
语法不起作用的原因是您使用的第二个条件:
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建议的更高级的代码。
https://stackoverflow.com/questions/41552744
复制相似问题