SPSS – 字符串变量的缺失值处理

作者:Ruben Geert van den Berg,发表于 SPSS 博客

  • 设置字符串变量的缺失值
  • 缺失字符串值与 MEANS 命令
  • 缺失字符串值与 CROSSTABS 命令
  • 缺失字符串值与 COMPUTE 命令
  • 缺陷的解决方法

在 SPSS 中可以为字符串变量设置缺失值吗? 简短的回答:可以。 但遗憾的是,它并没有按预期工作。 本教程将引导您了解一些问题和解决方法。

示例数据

本教程中的所有示例都使用 staff.sav 数据文件,部分内容如下所示。 我们将并行对“Job Type (职位类型)”(字符串变量)和“Marital Status (婚姻状况)”(数值变量)执行一些基本操作。

SPSS 员工数据变量视图

首先,让我们通过运行以下 语法 为两个变量创建基本频数分布。

***数值变量和字符串变量的最小频率表。
**
frequencies marit jtype.

结果

让我们快速看一下下面显示的字符串变量的频率分布。

SPSS 频率表字符串变量无缺失值

默认情况下,字符串变量 中的所有值都是有效的(非缺失),包括零个字符的空字符串值。

设置字符串变量的缺失值

现在,假设我们想将空字符串值和“(Unknown)”设置为 用户缺失值。 经验丰富的 SPSS 用户可能会认为运行 missing values jtype ('','(Unknown)'). 应该可以解决问题。 遗憾的是,SPSS 只是给出了一个令人困惑的警告:

> Warning # 4812 in column 26. Text: (Unknown)
> The missing value is specified more than once.

首先,此警告毫无意义:我们没有多次指定任何缺失值。 即使我们这样做了,那又如何?

其次,该警告没有告诉我们_真正_的问题。 如果我们运行 missing values jtype ('(Unknown)').,我们会发现问题。 这会触发以下警告,告诉我们用户缺失的字符串值太长。

> Error # 4809 in column 23. Text: (Unknown)
> The missing value exceeds 8 bytes.
> Execution of this command stops.

解决此问题的一个快速方法是简单地将 ‘(Unknown)’ RECODE 为更短的字符串,例如 ‘NA’(“Not Available”的缩写)。 以下语法就是这样做的。 然后,它为“Job Type (职位类型)”设置用户缺失值并重新运行频率表。

***将 (Unknown) 转换为更短的字符串值。
**
recode jtype ('(Unknown)' = 'NA').

***为字符串变量设置 2 个用户缺失值。
**
missing values jtype ('','NA').

***快速检查。
**
frequencies marit jtype.

结果

SPSS 用户缺失值字符串变量频率输出

此时,一切似乎都很好:空字符串值和“NA”都列在频率表中的缺失值部分中。

缺失字符串值与 MEANS 命令

运行基本 MEANS 表时,用户缺失的字符串值被视为有效值。 以下语法演示了该问题:

***按数值变量和字符串变量的基本 MEANS 命令。
**
means salary by marit jtype
/statistics anova.

结果

SPSS 缺失值字符串变量 Means 表

请注意,用户缺失值在第一个 means 表中被排除,但在第二个 means 表中被包括。 由于这没有意义且没有记录,因此我强烈怀疑这是 SPSS 中的一个 bug

现在让我们尝试一些 CROSSTABS。

缺失字符串值与 CROSSTABS 命令

我们现在从以下语法中运行两个基本列联表。

***按数值变量和字符串变量的基本 CROSSTABS。
**
crosstabs marit jtype by sex.

结果

SPSS 缺失值字符串变量 Crosstabs 输出

基本结论:两个表都完全排除了字符串变量和数值变量的用户缺失值。 这表明上述问题仅限于 MEANS 命令。 但不幸的是,还有更多麻烦…

缺失字符串值与 COMPUTE 命令

二分化 变量的一个好方法是使用单行 COMPUTE 命令,例如 compute marr = (marit = 2). 在此语法中,(marit = 2) 是一个条件,对于某些情况可能为假,而对于另一些情况可能为真。 SPSS 返回 0 和 1 来表示假和真,因此创建了一个不错的 虚拟变量

现在,如果 marit 是(系统或用户)缺失值,SPSS 不知道条件是否为真,因此在新变量上返回系统缺失值。 遗憾的是,这不适用于字符串变量,如下所示。

***二分化数值变量(正确结果)。
**
compute marr = (marit = 2).

variable labels marr 'Currently married (yes/no)'.

frequencies marr.

***二分化字符串变量(错误结果)。
**
compute it = (jtype = 'IT').

variable labels it 'Job type IT (yes/no)'.

frequencies it.

解决此问题的一种方法是使用 IF 命令。 这本不应该必要的,但它确实可以规避这个问题。

***在正确重新计算它之前删除“it”。
**
delete variables it.

***二分化字符串变量(正确结果)。
**
if(not missing(jtype)) it = (jtype = 'IT').

variable labels it 'Job type IT (yes/no)'.

frequencies it.

结果

SPSS 缺失值字符串变量 Compute 命令

缺陷的解决方法

本教程中讨论的问题很严重; 它们可能会产生容易被忽视的错误结果。 处理它们的几种方法如下:

  • 使用 AUTORECODE 命令将字符串变量自动重编码为数值变量,然后继续使用这些数值对应项。
  • 对于创建表和/或图表,使用 FILTER 排除具有字符串缺失值的情况,甚至使用 SELECT IF 完全删除它们。
  • 对于创建新变量,IF 和 DO IF 命令应该足以应对大多数情况。

好吧,我想关于用户缺失字符串值的内容应该足够了。 我希望您觉得我的教程有帮助。 如果您有任何问题或意见,请在下面给我们留言。

感谢您的阅读!