第2章. 数据处理与准备

本章目标:学会使用SPSS进行数据导入、变量属性设置,以及常用的数据处理操作(排序、拆分、计算、重编码、筛选)。

建议学习顺序:① 认识SPSS数据文件 → ② 导入/保存数据 → ③ 设置变量属性 → ④ 掌握5种核心数据处理操作。

操作速查表

操作目标菜单路径所在小节
导入Excel/CSV文件 → 打开 → 数据2.1.3
设置变量属性数据编辑器 → 变量视图2.1.2
保存为.sav文件 → 保存2.1.4
数据排序数据 → 排序个案2.2.1
分组拆分数据 → 拆分文件2.2.2
计算新变量转换 → 计算变量2.2.3
重编码转换 → 重新编码为不同变量 / 自动重新编码2.2.4
筛选记录数据 → 选择个案2.2.5
设置值标签变量视图 → 值单元格 / 语法 VALUE LABELS2.1.2 / 2.2.6

2.1节. 打开以及保存数据

2.1.1. 数据文件长什么样子

注:小节 2.1.1 (数据文件长什么样子)及小节 2.1.2 (变量视图)部分视频讲解请参见BV1oa411y7dK

gapminder.sav是一个典型的 SPSS 数据文件,请打开该文件并请关注以下几点:

  1. SPSS软件一般包含两个主要窗口图 2.1
    • 数据编辑器
    • 查看器
    • 在本实验系列课程中,我们还会用到第三个窗口:语法编辑器

一般我会习惯将三个窗口利用键盘的windows键(以下简称WIN)加上左右上下方向键快速把三个窗口拼装成下图的样子:

窗口排列
Figure 2.1: 窗口排列

如图,数据编辑器包含两个页面: 数据视图变量视图 ,默认展示的是 数据视图 。可以看到,每个变量的名称写在了各列的顶端:

表头
Figure 2.2: 表头

而每行左侧则是这一行的标识(index):

行标识
Figure 2.3: 行标识

在很多时候,如果没有具体制定记录的 名称,那么SPSS会默认使用 行标识 作为各个记录的 名称 中间的数据区域与Excel相类似,可以选取,复制,剪切,粘贴以及编辑各个单元格的值。接下来看一下变量视图。

→ 返回本章习题

2.1.2. 变量视图

仍以 gapminder.sav 为例,该数据文件的变量视图如下:

变量视图
Figure 2.4: 变量视图

每一个变量都具有图中所示的各个属性,比较重要的包括:

→ 返回本章习题

2.1.2.1. 设置值标签的方法

在变量视图中,大部分操作都可以直接在视图表格里完成,但是值标签需要首先点击值的 单元格 ,然后点击 按钮,值标签的设置在下面这个对话框里完成:

值标签的设置
Figure 2.5: 值标签的设置

例1.1:假设 age_coded 变量有5个值:1,2,3,4,5,分别表示 10~20岁20~30岁30~40岁40~50岁50岁及以上,现在在 age_coded 值单元格点出值标签对话框后,应如何操作?

  1. 设置值1的标签为10~20岁:
    • 值(U): 1
    • 标签(L): 10~20岁 点击 添加(A) 按钮
  2. 设置值2的标签为20~30岁:
    • 值(U): 2
    • 标签(L): 20~30岁 点击 添加(A) 按钮

对3,4及5等值的操作以此类推。

→ 返回本章习题

2.1.3. 导入数据

注:本部分视频讲解请参见BV1DS4y1G7iP

2.1.3.1. 导入Excel数据

功能:将Excel格式的数据(.xls, .xlsx, .xlsm)导入SPSS并保存为.sav格式。

菜单路径:文件 → 打开 → 数据(A)…

详细步骤

  1. 在弹出的 打开数据 对话框中:
打开数据对话框
Figure 2.6: 打开数据对话框
  1. 打开Excel数据源 对话框:
打开Excel数据源对话框
Figure 2.7: 打开Excel数据源对话框
  1. 将导入的数据保存成.sav格式的数据文件小节 2.1.4 (数据存储)

在某些情况下,会出现打开后的数据文件内容为空的情况。这个时候可以用WPS或Excel等软件打开数据文件,再将文件中的数据内容通过复制粘贴的方式拷贝进SPSS的数据编辑器内

→ 返回本章习题

2.1.3.2. 导入csv等文本数据

功能:将CSV或其他文本格式的数据导入SPSS。

菜单路径:文件 → 打开 → 数据(A)…

详细步骤

  1. 打开数据 对话框(图 2.6)中:
  1. 文本导入向导- 第1步,共6步 对话框,点击 下一步
  2. 文本导入向导- 第2步,共6步 对话框:
  1. 文本导入向导- 第3步,共6步 对话框:
  1. 文本导入向导- 第4步,共6步 对话框:
  1. 文本导入向导- 第5步,共6步 对话框: 设置各列的变量名称。如前所述,SPSS有若干的保留变量名,如果导入的变量名与之相重合的时候程序会报错,可以尝试更改 变量名称(V)
  2. 文本导入向导- 第6步,共6步 对话框: 点击 完成
  3. 在变量视图中检验导入的各个变量的名称、类型以及度量标准,并设置变量标签和值标签。
  4. 将导入的数据保存成.sav格式的数据文件,参考小节 2.1.4 (数据存储)

→ 返回本章习题

2.1.4. 数据存储

功能:将当前数据保存为SPSS原生格式(.sav)或其他格式,便于后续直接打开使用。

菜单路径:文件 → 保存(或 另存为

操作步骤:在 将数据保存为 对话框中:

→ 返回本章习题

2.2节. 数据处理

注:本部分视频讲解请参见:BV1jY411L7HN

本节导读:数据处理是统计分析前的必要准备。本节介绍的5种核心操作(排序、拆分、计算、重编码、筛选)在后续各章都会反复用到,建议结合例题动手练习。

每种操作都统一按以下格式讲解:功能 → 菜单路径 → 操作步骤 → 示例 → 对应语法 → 关键要点

2.2.1. 排序

功能:按照一个或多个变量的值对数据记录进行升序或降序排列。

菜单路径:数据 → 排序个案

操作步骤:打开 排序个案 对话框(图 2.8),按以下方式设置:

排序个案
Figure 2.8: 排序个案

例1.2gapminder.sav数据文件优先按照年份(year)升序(从小到大)排列,进一步的,按照预期寿命(lifeExp)降序(从大到小)排列

  1. 变量源列表 (year) > 排序依据
  2. 排序顺序:选择 升序(A)
  3. 变量源列表 (lifeExp) > 排序依据
  4. 排序顺序:选择 降序(D)
  5. 确定 按钮可以立即排序,而如果我们点 粘贴按钮则可以把实现这种排序的语法粘贴入语法窗口,具体的语法如下代码块 2.1

语法代码 2.1: 数据排序的语法代码

DATASET ACTIVATE 数据集1.
SORT CASES BY year(A) lifeExp(D).

语法说明:

  1. 上面语句的第一行是激活数据文件。如果我们注意看之前数据编辑器的截图图 2.1 ,在数据编辑器左上角除了 gapminder.sav 这个文件名,还有 数据集1 这样的字样。如果我们打开了多个数据集,可以依靠这个标识区分不同的数据集
  2. 排序的语法首先是 SORT CASES,而 BY 的后面跟着的则是变量的名称。请注意每个变量后面跟着一个括号,里面表示按升序((A)),还是降序((D)
  3. 请注意每一个语法语句的末尾都会有一个 英文的句号作为结束
  4. 语法不区分大小写
  5. 请注意语法的各个单词之间有 空格
  6. 运行 语法的方式很简单:需要运行的语法代码,点击语法编辑器图 1.3中的绿色三角形

思考题:如果我要首先按照年份升序排列,再按照人口升序排列,上面的语法应该如何更改?尝试自己编写语法,然后使用 排序个案 对话框按照前述的操作对数据文件进行排序,点击 粘贴 按钮生成语法,看一下自己写的是否正确。

→ 返回本章习题

2.2.2. 拆分

功能:按照某个分类变量的值将数据分组,后续的所有统计分析都会按组分别输出结果。

适用场景:当需要按某个类别(如性别、地区、实验分组)分别查看统计结果时使用。

菜单路径:数据 → 拆分文件

操作步骤:打开 分割文件 对话框(图 2.9),按以下方式设置:

分割文件
Figure 2.9: 分割文件

例1.3 按照记录所在的大洲(continent)进行分组,统计各大洲人口最大值

  1. 分割文件:

    1. 选择 比较组(C)
    2. 变量源列表 (continent) > 分组方式
    3. 如果要按照continent对数据文件进行排序,可以选择 按分组变量排序文件
    4. 粘贴 按钮可以看到生成的语法:

    语法代码 2.2: 拆分文件

    SORT CASES  BY continent.
    SPLIT FILE LAYERED BY continent.

    第1行的 SORT CASES 我们刚刚在排序中代码块 2.1见过,出现这一句是由于在分割文件的第3步我们选择了 按分组变量排序文件。 第2行的 SPLIT FILE 是分割文件的语句,分割文件的两种形式 比较组按组组织输出 分别对应的是 LAYEREDSEPERATED, 而 BY 后面的则是变量名

  2. 计算最大值: 在进行分割文件以后,从数据编辑器和输出窗口里都看不出什么变化,所以接下来我们提前用一下下一章的内容,展示一下分割文件对后续的分析产生的影响。这里使用描述性统计的频率来计算最大值,通过以下菜单操作打开频率对话框:

    • 分析
      • 描述统计
        • 频率
    1. 变量源列表 (pop) > 变量
    2. 点击 统计量(S)频率:统计量 对话框中:
      1. 离散
        • 最大值
      2. 继续 按钮
    3. 显示频率表格
    4. 粘贴 按钮

    于是生成以下语法:

    语法代码 2.3: 获取最大值

    FREQUENCIES VARIABLES=pop
    /FORMAT=NOTABLE
    /STATISTICS=MAXIMUM
    /ORDER=ANALYSIS.

    具体语法的讲解留到下一章,这里先看一下运行以后的效果,从输出窗口可以看到:

    分组统计最大值

    这样我们就分别统计了各个大洲中人口这个变量的最大值

思考题:尝试 按组组织输出 分割文件,之后统计各大洲的人口最大值,看一下与 比较组 形式的分割,结果有什么不同

请注意,进行拆分文件操作以后,当前数据文件会一直保持拆分的状态,只有在 分割文件 对话框中图 2.9选择 分析所有个案,不创建组 才能取消拆分。具体操作只需要在 分割文件 对话框中选择 分析所有个案,不创建组 即可。

→ 返回本章习题

2.2.3. 计算变量

功能:根据现有变量和公式计算出一个新的变量。

菜单路径:转换 → 计算变量

操作步骤:打开 计算变量 对话框(图 1.2),按以下方式设置:

例1.4 计算人均gdp,命名为 gdp_per_capita

其中人均gdp的计算公式为:\[人均gdp=gdp/人口数\qquad{(2.1)}\]

具体的,计算过程如下:

  1. 目标变量: gdp_per_capita

  2. 类型与标签,打开 计算变量:类型和标签 对话框

    • 标签: 人均gdp
    • 类型:选择 数值
    • 继续
  3. 数字表达式: gdp/pop

    在上面的表达式中,gdp与pop可以手动输入,也可以通过双击 变量源列表 中对应的变量名输入

  4. 粘贴 获取语法代码

语法代码 2.4: 计算变量

COMPUTE gdp_per_capita=gdp / pop.
VARIABLE LABELS  gdp_per_capita '人均gdp'.
EXECUTE.

上面的语法代码块 2.4中,第1行是计算变量自己的语法,COMPUTE加上表达式,表达式等号左边是变量名,右边是表达式自身eq. 2.1; 第2行是设置变量标签的语法。会出现这一语法是由于我们在第二步设置了 类型与标签 第3行的 EXECUTE. 表示执行代码 运行上述代码后,可以在数据编辑器中看到出现了新的变量: gdp_per_capita

→ 返回本章习题

2.2.4. 重编码

功能:将一个变量的旧值按照规则转换为新值,生成一个新变量。

两种常见用途

  1. 字符变量 → 数值变量:字符串(如 "Asia")不能直接用于统计分析,必须转为数值编码(如 1)。
  2. 连续变量 → 等级变量:如将年龄划分为 "青年/中年/老年"(详见第3章频数表)。

本节重点:第一种情况(字符 → 数值)。SPSS提供两种方法:

示例:在 gapminder.sav 中,将 continent 重新编码为新变量 continent_coded,规则为 Asia: 1, Europe: 2, Africa: 3, Americas: 4, Oceania: 5。

2.2.4.1. 利用 重新编码为其他变量 功能

菜单路径:转换 → 重新编码为不同变量

操作步骤

  1. 打开 重新编码为其他变量 对话框(图 2.10)。
重新编码为其他变量
Figure 2.10: 重新编码为其他变量
  1. 变量源列表 (continent) > 输入变量 -> 输出变量

  2. 输出变量

    • 名称:输入新变量名称 continent_coded
    • 标签:大洲
    • 点击 更改
  3. 点击 旧值和新值,打开 重新编码到其他变量:旧值和新值 对话框,如下图:

重新编码到其他变量:旧值和新值
Figure 2.11: 重新编码到其他变量:旧值和新值

在本例中,旧值和新值是一一对应的关系,如果一个范围内的旧值编码成同一个新值的话(例如在频数表的编制过程中)需要选择范围相关的选项

  1. 在旧值和新值对话框中 图 2.11 ,依次对各个旧值-新值配对按照下面的方式操作(下面以Asia编码为1为例):
    • 旧值
      • : Asia
    • 新值
      • : 1
    • 点击 添加(A)
  2. 完成5对新旧值配对的定义后,点 继续 按钮回到 重新编码为其他变量 对话框 图 2.10
  3. 粘贴 获取语法代码

语法代码 2.5: 重编码为其他变量

RECODE continent ('Asia'=1) ('Europe'=2) ('Africa'=3) ('Americas'=4) ('Oceania'=5) INTO 
    continent_coded.
VARIABLE LABELS  continent_coded '大'.
EXECUTE.

在上面的语法代码 代码块 2.5 中:

→ 返回本章习题

2.2.4.2. 利用 自动重新编码 功能

适用场景:当只需要将字符串变量转为数值编码,且不关心各个类别对应的具体数字时,可使用此功能快速完成转换。

菜单路径:转换 → 自动重新编码

示例:将 continent 重新编码为新变量 continent_coded,5个大洲自动编码为1至5。

操作步骤:打开 自动重新编码 对话框(图 2.12),按以下方式设置:

自动重新编码
Figure 2.12: 自动重新编码

注1:如果需要对多个变量重编码,而且重编码的规则是一致的,请注意勾选 [ ] 对所有变量使用相同的重新编码设计

注2:字符串变量的缺失值往往会被SPSS识别为空的字符串:"", 所以除非空值代表特定意义,一般建议勾选 [ ] 将空字符串值视为用户缺失值

生成代码如下:

语法代码 2.6: 自动重编码

DATASET ACTIVATE 数据集1.
AUTORECODE VARIABLES=continent 
  /INTO continent_coded
  /GROUP
  /BLANK=MISSING
  /PRINT.

在变量视图里可以看到新生成的变量不仅将原先的字符串转换成了 名义 类型变量,还很贴心的根据原先的字符串内容设置好了 值标签,唯一美中不足的地方就是没有一并设置好 变量标签, 只要在 代码块 2.6 后面参考 代码块 2.5 多加一句 VARIABLE LABELS continent_coded '大洲'. 就可以解决这一问题。

可以看到如果对于字符串中各种值的先后排列顺序没有特定的要求,自动重新编码功能也是非常好用的选择

→ 返回本章习题

2.2.5. 筛选

功能:按照指定条件选取一部分记录,后续分析只针对选中的记录进行。

菜单路径:数据 → 选择个案

示例:从 gapminder.sav 中筛选出年份等于2007的记录,以便统计该年各大洲人口的平均值。

操作步骤

  1. 打开 选择个案 对话框(图 2.13)。
  1. 选择
    • 如果条件满足 点击 如果(I) 按钮 打开 条件定义 对话框
    条件定义
    Figure 2.13: 条件定义
    可以看到这个对话框和 计算变量 对话框 图 1.2 非常相似
  2. 在 图 2.13 对话框中录入筛选表达式
    • 变量源列表:双击 year
    • 补全表达式:year=2007 点 继续 回到 选择个案 对话框
  3. 输出
    • 选择 过滤掉未选定的个案
  4. 粘贴 生成如下语法代码:

语法代码 2.7: 过滤记录

USE ALL.
COMPUTE filter_$=(year=2007).
VARIABLE LABELS filter_$ 'year=2007 (FILTER)'.
VALUE LABELS filter_$ 0 'Not Selected' 1 'Selected'.
FORMATS filter_$ (f1.0).
FILTER BY filter_$.
EXECUTE.

代码 代码块 2.7 说明: - USE ALL. 表示使用所有数据,相当于清空之前已经存在的筛选 - 正如界面与 计算变量 非常类似,生成的语法也与之相同: COMPUTE filter_$=(year=2007).是通过逻辑判定 year 变量值是否等于2007,等于的会得到值 1,而不等于的会得到值 0 - 接下来的 VARIABLE LABELS 是给新生成的计算变量 filter_$ 设置变量标签 - 第4行的 VALUE LABELS 是新出现的语句,这个语句负责设置变量值的标签,在 #2.6 会再进一步讨论 - 第5行是设置数字格式 - 第6行则是表明使用新生成的变量 filter_$ 作为筛选变量

运行这些代码以后,可以看到年份不等于2007的记录前面的 行标签 会被打上斜线,表示这些记录不会进入后续的分析。

→ 返回本章习题

2.2.6. 再谈一下值标签

功能:为变量的各个取值设置文字说明,方便结果解读。

两种设置方式

  1. 图形界面:在变量视图中点击变量的 单元格,逐个添加(见 2.1.2.1)。
  2. 语法命令:使用 VALUE LABELS 语句批量设置,适合需要重复操作或保留操作记录的场景。

在 小节 2.2.5 (筛选) 生成的 代码块 2.7 里,已经出现了设置值标签的语句,其通用格式如下:

语法代码 2.8: 设置值标签的语法代码

VALUE LABELS 设置值标签的变量名 变量值#1 '值标签#1' 变量值#2 '值标签#2'.

依照上面的格式,我们可以手动编写语法实现设置值标签的工作。

例1.7 之前在 小节 2.2.4.1 (利用 重新编码为其他变量 功能) 我们通过重编码新建了变量 continent_coded ,接下来请参照 代码块 2.8 的语法设置这个变量的值标签:1:亚洲,2:欧洲,3:非洲,4:美洲,5:大洋洲

语法代码 2.9: 设置值标签的语法代码-2

VALUE LABELS continent_coded
1 '亚'
2 '欧'
3 '非'
4 '美'
5 '大洋洲'.
EXECUTE.

运行代码后可自行到变量视图的 continent_coded 变量中检查值标签是否被设置好了。

需要注意:

语法的高亮显示
Figure 2.14: 语法的高亮显示

请注意 行号 46 对应的 EXECUTE. 没有显示成蓝色,这是因为 行号 45VALUE LABELS 语句组最后结束的时候没有加 . 。所以如果发现语法高亮出现问题以后,请先检查一下代码里面有没有这种低级错误。

→ 返回本章习题

2.3节. 习题

打开 c1_exe_01.sav 文件,完成以下练习:

  1. 参考 小节 2.1.2 (变量视图) 设置变量标签:
    • gender:性别
    • age:年龄
    • height:身高
    • weight:体重
  2. 将gender变量按照男性:1,女性:2的规则重编码,请注意:该变量对性别包含多种描述,包括male,man,female等,对其重编码首先需要知道gender变量包含哪些具体的值,然后利用重编码将各种值进行编码。重编码后的新变量名称请命名为 gender_code,标签为性别
    1. 使用 分析>描述性统计>频率 工具绘制gender的频数表,这样就可以知道该变量具体包含哪些值
    2. 参考 小节 2.2.4.1 (利用 重新编码为其他变量 功能) 使用重编码为不同的变量功能进行重编码
    3. 参考 小节 2.1.2.1 (设置值标签的方法) 以及 小节 2.2.6 (再谈一下值标签) 按照男性:1,女性:2的方式对 gender_code 设置值标签
  3. 按照\(bmi=\frac{weight}{height^2}\)的公式,参考 小节 2.2.3 (计算变量) 使用计算变量工具生成bmi变量
  4. 参考 小节 2.2.2 (拆分) 依据性别分组,统计各组 bmi 变量的算数平均值。算数平均值的计算方法可以参考第二章中[#2.4.1 使用频率对话框计算]
  5. 参考 小节 2.2.1 (排序) 将数据优先按照年龄升序排列,次要按照身高降序排列
  6. 按照原文件名保存数据文件

习题技能对照与快速查阅

题号考察技能对应讲义小节
第1题设置变量标签2.1.2 变量视图
第2题查看变量的取值分布(频数表)第3章 描述性统计(频率工具)
将字符串变量重编码为数值变量2.2.4.1 重新编码为其他变量
为编码后的变量设置值标签2.1.2.1 设置值标签的方法2.2.6 再谈一下值标签
第3题根据公式计算新变量2.2.3 计算变量
第4题按分组变量拆分文件,分组统计2.2.2 拆分
第5题按多个变量排序(升序/降序)2.2.1 排序
第6题保存为SPSS数据文件2.1.4 数据存储