我应该根据某些条件检查值的存在。
即我有3个变量,varA,varB和varC。仅当varA> varB(条件)时,varC不应为空。
我通常使用某种语法来检查任何变量,并按其频率运行以查看是否有错误:
if missing(varC) and (varA>varB) ck_varC=1.
if not(missing(varC)) and not(varA>varB) ck_varC=2.
exe.
fre ck_varC.
exe.
当条件变得复杂并且在条件中缺少missing()或其他函数时,我遇到了一些错误,但是我可能会犯一个错误。
您是否认为有一种更简便的检查方法?
预先感谢
编辑:这是我的意思的一个示例,想想在一个带有某种路由的问卷中,您问任何人的年龄,如果他们在17到44岁之间,问他们是否工作,是否工作,问他们几个小时。 / p>
我有一个excel工具,其中我放下了所有条件的所有变量,然后它将在示例中生成语法,所有变量的结构都相同,考虑到两种情况,我们都有一个不应为否则我们没有应该存在的值。
有更简单的方法吗?无论什么条件,这种结构始终有效吗?
答案 0 :(得分:1)
在SPSS中,缺少的值不是数字。您还需要显式编程这些方案。您{部分覆盖了varC
,但是没有覆盖varA
或varB
缺少数据的情况。
(作为一种好的做法,也许,您应该使用语法将检查变量初始化为sysmis或0):
numeric ck_varC (f1.0).
compute ck_varC=0.
if missing(varC) and (varA>varB) ck_varC=1.
if not(missing(varC)) and not(varA>varB) ck_varC=2.
***additional conditional scenarios go here:.
if missing(varA) or missing(varB) ck_varC=3.
...
fre ck_varC.
顺便说一句-如果要整体运行语法,则不需要任何exe.
命令。
稍后编辑,在发布者更新问题之后:
您的语法将是这样。请注意,range
函数的使用不是强制性的,但将来可能对您有用。
我还假设work
是一个字符串变量,因此需要使用引号将其值引用。
if missing(age) ck_age=1.
if missing(work) and range(age,17,44) ck_work=1.
if missing(hours) and work="yes" ck_hours=1.
if not (missing (age)) and not(1>0) ck_age=2. /*this will never happen because of the not(1>0).
if not(missing(work)) and (not range(age,17,44)) ck_work=2. /*note that if age is missing, this ck_work won't be set here.
if not(missing(hours)) and (not(work="yes")) ck_hours=2.
EXECUTE.
字符串变量区分大小写
字符串中没有与missing
等价的字符串;空的空白字符串(“”)仍然是字符串。当not(work="yes")
为空白(“”)时,True
为work
。