SPSS IF 命令快速教程
By Ruben Geert van den Berg
翻译 & 撰写: [your name]
在 SPSS 中,IF
命令用于根据条件,对部分个案(cases)计算新的或已存在的变量值。如果想对符合条件的个案进行_分析_,请使用 FILTER 或 SELECT IF 命令。
- 示例 1 - 基于日期函数标记个案
- 示例 2 - 使用函数替换某个范围内的值
- 示例 3 - 基于性别以不同的方式计算变量
- SPSS
IF
命令与DO IF
命令对比 - SPSS
IF
命令与RECODE
命令对比
示例所用的数据文件
所有示例都使用 bank.sav 数据文件,这是一个关于银行员工的简短调查。部分数据如下所示。为了更好地学习本教程,我们建议您下载该文件并亲自尝试这些示例。
示例 1 - 基于日期函数标记个案
让我们标记所有出生在 80 年代的受访者。下面的 语法 (syntax) 首先将我们的标记变量 born80s
创建为一个全部为零的列。然后,如果从出生日期 (date of birth) 中提取的年份在 RANGE 1980 到 1989 之间,则将其设置为 1。
***创建新的变量,初始值全部为零。
compute born80s = 0.
***如果受访者出生在 1980 年到 1989 年之间,则将值设置为 1。
if(range(xdate.year(dob),1980,1989)) born80s = 1.
execute.
***可选:添加值标签 (value labels)。
add value labels born80s 0 'Not born during 80s' 1 'Born during 80s'.
结果
示例 2 - 使用函数替换某个范围内的值
接下来,如果我们在每周工作小时数 whours
上运行直方图 (histogram),我们会看到 160 小时及以上的值。然而,每周只有 (24 * 7 =) 168 小时。即使 金正恩 也不会声称他每周工作 160 小时! 我们假设这些受访者填写的是_每月_的工作小时数,而不是每周。平均而言,每个月有 (52 / 12 =) 4.33 周。因此,我们将每周小时数除以 4.33,但仅针对得分 160 或以上的个案。
***按每周小时数降序排序个案。
sort cases by whours (d).
***将 160 小时或更多的小时数除以 4.33(每月的平均周数)。
if(whours >= 160) whours = whours / 4.33.
execute.
结果
注意
我们也可以使用 RECODE 命令进行此更正:RECODE whours (160 = 36.95)(180 = 41.57).
。但是请注意,如果我们需要更正更多不同的值,RECODE
命令会变得繁琐。对于此变量,它运行良好,但 IF
命令对于_所有_变量都非常有效。
示例 3 - 基于性别以不同的方式计算变量
现在,我们将标记全职工作的个案。但是,“全职”对于男性员工意味着 40 小时,对于女性员工意味着 36 小时。因此,我们需要根据性别使用不同的公式。下面的 IF
命令可以做到这一点。
***计算 fulltime,初始值全部为零。
compute fulltime = 0.
***如果女性的 whours >= 36 或男性的 whours >= 40,则将 fulltime 设置为 1。
if(gender = 0 & whours >= 36) fulltime = 1.
if(gender = 1 & whours >= 40) fulltime = 1.
***可选,添加值标签 (value labels)。
add value labels fulltime 0 'Not working fulltime' 1 'Working fulltime'.
***快速检查。
means whours by gender by fulltime
/cells min max mean stddev.
结果
我们的语法以 MEANS 表结尾,该表显示每个性别组的最小值 (minima)、最大值 (maxima)、平均值 (means) 和标准差 (standard deviations)。此表(如下所示)是检查结果的好方法。
对于_非_全职工作的女性,最大值低于 36。全职工作的女性的最小值为 36。以此类推。
SPSS IF
命令与 DO IF
命令对比
一些 SPSS 用户可能熟悉 DO IF 命令。DO IF
和 IF
之间的主要区别在于:
IF
是单行命令,而DO IF
至少需要 3 行:DO IF
、一些转换 (transformation),以及END IF
。IF
是有条件的 COMPUTE 命令,而DO IF
也可以影响其他转换,例如RECODE
或COUNT
。- 如果个案满足多个条件,当使用
DO IF - ELSE IF
时,_第一个_条件优先。如果改为使用多个IF
命令,则每个个案满足的_最后一个_条件生效。以下语法概述了这个想法。
DO IF - ELSE IF
与多个 IF
命令
***DO IF:满足两个条件的受访者得到 result_1。
do if(condition_1).
result_1.
else if(condition_2). /*排除满足 condition_1 的个案。
result_2.
end if.
***IF:满足两个条件的受访者得到 result_2。
if(condition_1) result_1.
if(condition_2) result_2. /*包括满足 condition_1 的个案。
SPSS IF
命令与 RECODE
命令对比
在许多情况下,RECODE
是 IF
的更简单替代方案。但是,RECODE
也有更多限制。
首先,RECODE
仅将(范围)常量(例如 0、99 或 系统缺失值 (system missing values))替换为其他常量。因此,类似 recode overall (sysmis = q1).
的操作是不可能的 - q1
是一个变量,而不是一个常量 - 但是 if(sysmis(overall)) overall = q1.
可以正常工作。您不能将函数(mean
、sum
或其他)RECODE
为任何内容,也不能将任何内容 RECODE
为函数。您需要使用 IF
命令才能做到这一点。
其次,RECODE
只能基于单个变量设置值。这就是为什么您不能将 2 个变量 recode
为 1 个变量的原因,但是您可以使用涉及多个变量的 IF
条件:if(gender = 0 & whours >= 36) fulltime = 1.
是完全可行的。
但是,您可以通过将 RECODE
与 DO IF
结合使用来解决此限制。例如,我们的最后一个示例展示了使用不同标准标记全职工作的男性和女性的不同途径。
示例 4 - 基于性别以不同的方式计算变量 II
***为所有人将 whours Recode 到 fulltime2。
recode whours (40 thru hi = 1)(else = 0) into fulltime2.
***对女性受访者应用不同的 recode。
do if(gender = 0).
recode whours (36 thru hi = 1)(else = 0) into fulltime2.
end if.
***可选,添加值标签 (value labels)。
add value labels fulltime2 0 'Not working fulltime' 1 'Working fulltime'.
***快速检查。
means whours by gender by fulltime2
/cells min max mean stddev.