首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SPSS语法-基于3个变量的新变量

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

Stack Overflow用户
提问于 2017-01-10 00:41:59
回答 2查看 235关注 0票数 1

我需要创建一个基于3个变量的新变量。

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

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

其他的代码都是99

在语法中,我将其写为:

代码语言:javascript
复制
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的情况,但是语法的其余部分不起作用。尽管使用了一些语法,这些语法在其他变量上使用了完全相同的逻辑:

代码语言:javascript
复制
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.

有谁知道为什么会发生这种情况,以及如何修复它?

EN

回答 2

Stack Overflow用户

发布于 2017-01-10 01:05:09

尝试:

代码语言:javascript
复制
COMPUTE Target1=99.
COMPUTE Target1=ANY(2, V1, V2, V3).
COMPUTE Target1=ANY(1, V1, V2, V3).

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 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进行比较,您应该检查它是否已接收到值,或者是否仍缺少值:

代码语言:javascript
复制
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建议的更高级的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41552744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档