SPSS VARSTOCASES:用途与详解

作者:Ruben Geert van den Berg,归属于 SPSS A-Z 系列

SPSS VARSTOCASES - 最小示例

SPSS 中的 VARSTOCASES 命令是 “variables to cases”(变量转换为个案)的缩写。它的作用是重组数据,通过将多个变量堆叠在一起,转换成新的个案,如上图所示。你可以下载并打开 sav_data018 数据文件,并运行以下语法,亲自尝试这个简单的示例。

SPSS VARSTOCASES 示例 1

***非常基础的 VARSTOCASES 示例。**
varstocases
/make v from v1 v2
/index q (v).

SPSS VARSTOCASES - 为什么使用它?

使用 VARSTOCASES 的一个重要原因是,许多 SPSS 图形只有在将相关变量堆叠在一起后才能生成。 此外,VARSTOCASES 还可以方便地生成一些表格。 例如,让我们看看 freelancers.sav 中的一些数据。

SPSS VARSTOCASES - 数据视图

我们可能想比较受访者多年来从事的行业,如下表所示。

SPSS VARSTOCASES - 概览表

有道理,对吧? 现在,创建此表的一种方法是使用 CTABLES (custom tables,定制表),但这需要一个(付费)附加模块。 其次,TABLES 命令也可以实现此目的,但它仅在(具有挑战性的)语法中可用,并且不再有文档记录。

第三种选择是 VARSTOCASES,然后是 CROSSTABS 命令,如下所示。 请注意,VARSTOCASES 会导致不正确的 variable label(变量标签),因此我们在步骤 2 中对其进行更正。 我们稍后将讨论这个问题。

SPSS VARSTOCASES 示例 2

***1. Varstocases.  **
varstocases
/make sector from sector_2010 to sector_2014
/index year(sector).

***2. Correct variable label.  **
variable labels sector "Sector in which respondent was working".

***3. Extract year from string.  **
compute year = char.substr(year,index(year,'_') + 1).
execute.

***4. Generate table.  **
crosstabs sector by year/cells column.

SPSS VARSTOCASES - 创建多个变量

我们前两个示例创建了一个包含原始值的一个变量,以及一个包含原始变量名称的第二个(索引)变量。 但是,在某些情况下,你可能希望一次性重组多组变量。 例如,让我们考虑 sav_data016 ,其中包含典型的反应时间数据。

SPSS VARSTOCASES - 反应时间

显然,受访者进行了 5 次试验,每次试验都产生一个答案和一个反应时间。 那么,错误的答案是否具有更短或更长的平均反应时间? 一种方法是使用以下 VARSTOCASES 语法,然后可能使用 MEANS 命令。

SPSS VARSTOCASES 示例 3

***Varstocases: two sets of variables.  **
varstocases
/make t from t1 to t5
/make a from a1 to a5
/index trial.

结果

SPSS VARSTOCASES - 结果

SPSS VARSTOCASES - 错误结果

在我们的第二个示例中,我们将两个变量堆叠在一个新变量中。 两个输入变量都有一个变量标签 (variable label),但是(单个)输出变量只能有一个变量标签。 SPSS 通过使用它遇到的第一个变量标签来“解决”这个问题。 在大多数情况下,这将是不正确的,但我们会很容易看到这个问题。 VARSTOCASES 的真正问题在于,相同的原理也适用于值标签 (value label)。 这可能会导致无意义的结果。 我们现在将在 sav_data017 上演示这一点,该文件的一部分如下所示。

SPSS VARSTOCASES - 政治数据视图

我们首先运行基本的 FREQUENCIES 命令。 请注意,这两个问题基本上表明,政治家在我们的受访者中不是很受欢迎。

***1. Show values and value labels in output.  **
set tnumbers both.

***2. Frequency tables.  **
frequencies v1 v2.

结果

SPSS VARSTOCASES - 正确的频率

重要的是,这些表格还显示我们的两个变量具有不一致的值标签 (value label)。 我们现在运行 VARSTOCASES 命令,并使用单个列联表复制这两个频率表。

SPSS VARSTOCASES 示例 4

***1. Varstocases.  **
varstocases
/make v from v1 v2
/index question(v).

***2. Remove incorrect variable label.  **
variable labels v ''.

***3. Note that result is not correct.  **
crosstabs v by question/cells columns.

结果

SPSS VARSTOCASES - 无意义的结果

请注意,VARSTOCASES 已将 v1 的值标签 (value label) 应用于 v1 和 v2 的值,从而导致误导性的结果。 更令人不安的是,SPSS 没有抛出任何错误或警告,表明在某个时候事情出了问题。

信不信由你,这不是一个错误。 VARSTOCASES 应该像这样工作,并且这种行为在 CSR 中进行了描述。 但是,我们想知道有多少 SPSS 用户意识到可能会发生这种情况。 即使是那些_意识到_这一点的人,也没有有效的方法来规避它,因为 SPSS 完全缺乏任何字典一致性检查。

就我个人而言,我们认为 VARSTOCASES 应该默认执行这样的检查,并且如果出现问题,至少发出警告。 此建议也适用于 ADD FILES 命令,该命令显示类似的问题行为,甚至更难避免。