SPSS 数据处理
数据处理是数据分析中的关键步骤,包括数据清洗、预处理、筛选、排序、计算、转换、合并和拆分等操作。
一、 数据清洗和预处理
数据清洗和预处理是数据分析过程中的重要步骤,可以帮助我们提高数据的质量,从而得到更准确的分析结果。介绍如何使用 SPSS 语法进行数据清洗和预处理,包括删除重复记录、处理缺失值和数据标准化。
1. 删除重复记录
SPSS 语法
假设要删除基于ID
和 Name
字段的重复记录,可以使用以下 SPSS 语法:
* 删除重复记录。
SORT CASES BY ID Name.
MATCH FILES /FILE=* /BY ID Name /FIRST=firstcase.
SELECT IF (firstcase=1).
EXECUTE.
解释
SORT CASES BY ID Name.
:首先对数据进行排序,确保重复记录相邻。MATCH FILES /FILE=* /BY ID Name /FIRST=firstcase.
:使用MATCH FILES
命令创建一个新变量firstcase
,标记每个ID
和Name
组合的第一个记录。SELECT IF (firstcase=1).
:只保留firstcase
为 1 的记录,即每个组合的第一个记录。EXECUTE.
:执行上述命令。
2. 处理缺失值
方法一:用均值替换缺失值
假设要用变量 var1
的均值替换其缺失值,可以使用以下 SPSS 语法:
* 用均值替换缺失值。
AGGREGATE
/OUTFILE=* MODE=ADDVARIABLES
/BREAK=
/var1_mean=MEAN(var1).
IF MISSING(var1) var1 = var1_mean.
EXECUTE.
方法二:用中位数替换缺失值
假设要用变量var1
的中位数替换其缺失值,可以使用以下 SPSS 语法:
* 用中位数替换缺失值。
AGGREGATE
/OUTFILE=* MODE=ADDVARIABLES
/BREAK=
/var1_median=MEDIAN(var1).
IF MISSING(var1) var1 = var1_median.
EXECUTE.
方法三:用众数替换缺失值
假设要用变量 var1
的众数替换其缺失值,可以使用以下 SPSS 语法:
* 用众数替换缺失值。
FREQUENCIES VARIABLES=var1 /FORMAT=NOTABLE /STATISTICS=MODE.
IF MISSING(var1) var1 = MODE(var1).
EXECUTE.
解释
AGGREGATE
:计算var1
的均值或中位数,并将其存储在一个新变量中。IF MISSING(var1) var1 = var1_mean/var1_median.
:如果var1
有缺失值,则用均值或中位数替换。EXECUTE.
:执行上述命令。
3. 数据标准化
SPSS 语法
假设要对变量 var1
进行标准化,可以使用以下 SPSS 语法:
* 数据标准化。
DESCRIPTIVES VARIABLES=var1 /SAVE.
EXECUTE.
解释
DESCRIPTIVES VARIABLES=var1 /SAVE.
:计算var1
的描述性统计量,并将标准化值保存为新变量Zvar1
。EXECUTE.
:执行上述命令。
4. 其他常用的数据清洗操作
删除空值记录
假设要删除所有包含空值的记录,可以使用以下 SPSS 语法:
* 删除所有包含空值的记录。
SELECT IF (NMISS(var1, var2, var3) = 0).
EXECUTE.
重编码变量
假设要将 gender
变量中的 “M” 重编码为 1,“F” 重编码为 ½
* 重编码 gender 变量。
RECODE gender ('M' = 1) ('F' = ˜2).
EXECUTE.
创建新变量
假设要创建一个新变量 age_group
,根据 age
变量进行分组,可以使用以下 SPSS 语法:
* 创建新变量 age_group。
IF (age < 18) age_group = 1.
IF (age >= 18 & age < 30) age_group = 2.
IF (age >= 30 & age < 50) age_group = 3.
IF (age >= 50) age_group = 4.
EXECUTE.
解释
IF (age < 18) age_group = 1.
:如果age
小于 18,将age_group
设为 1。IF (age >= 18 & age < 30) age_group = 2.
:如果age
在 18 到 30 之间,将age_group
设为 2。- 以此类推,根据不同的年龄范围设定不同的
age_group
值。 EXECUTE.
:执行上述命令。
二、数据筛选和排序
数据筛选
1. 选择符合条件的记录
假设想选择 age
大于等于 18 且 gender
为 “M” 的记录,可以使用以下 SPSS 语法:
* 选择符合条件的记录。
SELECT IF (age >= 18 AND gender = 'M').
EXECUTE.
2. 选择随机样本
假设想从数据集中选择 10% 的随机样本,可以使用以下 SPSS 语法:
* 选择 10% 的随机样本。
SAMPLE 10.
EXECUTE.
3. 选择特定数量的记录
假设想选择前 100 条记录,可以使用以下 SPSS 语法:
* 选择前 100 条记录。
SELECT IF ($casenum <= 100).
EXECUTE.
4. 选择特定范围的记录
假设想选择 ID 在 100 到 ¼
* 选择 ID 在 100 到 200 之间的记录。
SELECT IF (ID >= 100 AND ID <= 200).
EXECUTE.
5. 选择不重复的记录
假设想选择 ID
不重复的记录,可以使用以下 SPSS 语法:
* 选择 ID 不重复的记录。
SORT CASES BY ID.
MATCH FILES /FILE=* /BY ID /FIRST=firstcase.
SELECT IF (firstcase=1).
EXECUTE.
数据排序
1. 单字段排序
假设想按age
从小到大排序,可以使用以下 SPSS 语法:
* 按 age 从小到大排序。
SORT CASES BY age.
EXECUTE.
2. 多字段排序
假设想先按 gender
排序,再按 age
从小到大排序,可以使用以下 SPSS 语法:
* 先按 gender 排序,再按 age 从小到大排序。
SORT CASES BY gender (A) age (A).
EXECUTE.
3. 降序排序
假设想按 age
从大到小排序,可以使用以下 SPSS 语法:
* 按 age 从大到小排序。
SORT CASES BY age (D).
EXECUTE.
4. 多字段降序排序
假设想先按 gender
降序排序,再按 age
从大到小排序,可以使用以下 SPSS 语法:
* 先按 gender 降序排序,再按 age 从大到小排序。
SORT CASES BY gender (D) age (D).
EXECUTE.
综合示例
假设有一个数据集,包含 ID
, name
, age
, gender
和 income
字段。想选择 age
大于等于 18 且 gender
为 “M” 的记录,然后按 income
从高到低排序。可以使用以下 SPSS 语法:
* 选择符合条件的记录。
SELECT IF (age >= 18 AND gender = 'M').
EXECUTE.
* 按 income 从高到低排序。
SORT CASES BY income (D).
EXECUTE.
三、变量计算和转换
变量计算和转换是数据分析中的常见操作,可以帮助我们创建新变量、转换现有变量的数据类型或值,以及执行各种数学和逻辑运算。本节将详细介绍如何使用 SPSS 语法进行变量计算和转换。
变量计算
1. 创建新变量
假设想创建一个新的变量 total_score
,它是 score1
和 score2
的总和,可以使用以下 SPSS 语法:
* 创建新变量 total_score。
COMPUTE total_score = score1 + score2.
EXECUTE.
2. 计算平均值
假设想创建一个新的变量 average_score
,它是 score1
和score2
的平均值,可以使用以下 SPSS 语法:
* 创建新变量 average_score。
COMPUTE average_score = (score1 + score2) / 2.
EXECUTE.
3. 条件计算
假设想创建一个新的变量 bonus
,当 performance
大于 80 时,bonus
为 1000,否则为 0,可以使用以下 SPSS 语法:
* 创建新变量 bonus。
IF (performance > 80) bonus = 1000.
IF (performance <= 80) bonus = 0.
EXECUTE.
或者使用单行条件语句:
* 创建新变量 bonus。
COMPUTE bonus = 1000 * (performance > 80).
EXECUTE.
4. 复杂表达式
假设想创建一个新的变量 complex_score
,它是score1
的平方加上 score2
的两倍,可以使用以下 SPSS 语法:
* 创建新变量 complex_score。
COMPUTE complex_score = (score1 ** 2) + (2 * score2).
EXECUTE.
变量转换
1. 重新编码为相同变量
假设想将 gender
变量中的 “M” 重新编码为 1,“F” 重新编码为 2,可以使用以下 SPSS 语法:
* 重新编码 gender 变量。
RECODE gender ('M' = 1) ('F' = 2).
EXECUTE.
2. 重新编码为不同变量
假设想将 gender
变量中的 “M” 重新编码为 1,“F” 重新编码为 2,并创建一个新变量 gender_code
,可以使用以下 SPSS 语法:
* 重新编码 gender 变量并创建新变量 gender_code。
RECODE gender ('M' = 1) ('F' = 2) INTO gender_code.
EXECUTE.
3. 转换数据类型
假设想将 salary
变量从字符串类型转换为数值类型,可以使用以下 SPSS 语法:
* 将 salary 变量从字符串类型转换为数值类型。
ALTER TYPE salary (F8.2).
EXECUTE.
4. 日期转换
假设想将 date_string
变量(格式为 “YYYY-MM-DD”)转换为日期类型,可以使用以下 SPSS 语法:
* 将 date_string 变量转换为日期类型。
ALTER TYPE date_string (DATE10).
EXECUTE.
5. 字符串操作
假设想从 full_name
变量中提取姓氏(假设姓氏在名字之前),可以使用以下 SPSS 语法:
* 从 full_name 变量中提取姓氏。
STRING last_name (A20).
COMPUTE last_name = CHAR.SUBSTR(full_name, 1, CHAR.INDEX(full_name, ' ') - 1).
EXECUTE.
综合示例
假设有一个数据集,包含 ID
, name
, score1
, score2
, performance
, gender
, salary
和 date_string
字段。你想创建一个新的变量 total_score
作为 score1
和 score2
的总和,将 gender
重新编码为 gender_code
,并将 salary
从字符串类型转换为数值类型。可以使用以下 SPSS 语法:
* 创建新变量 total_score。
COMPUTE total_score = score1 + score2.
EXECUTE.
* 重新编码 gender 变量并创建新变量 gender_code。
RECODE gender ('M' = 1) ('F' = 2) INTO gender_code.
EXECUTE.
* 将 salary 变量从字符串类型转换为数值类型。
ALTER TYPE salary (F8.2).
EXECUTE.
四、数据合并和拆分
数据合并和拆分是数据分析中常见的操作,可以帮助我们整合多个数据集或根据某些条件将一个数据集拆分成多个数据集。
数据合并
1. 纵向合并(堆叠数据集)
纵向合并是指将两个或多个数据集垂直堆叠在一起,形成一个更大的数据集。
假设有两个数据集 data1.sav
和 data2.sav
,它们具有相同的变量结构,想将这两个数据集纵向合并成一个数据集,可以使用以下 SPSS 语法:
* 纵向合并两个数据集。
GET FILE='C:\path\to\your\file\data1.sav'.
ADD FILES /FILE=* /FILE='C:\path\to\your\file\data2.sav'.
EXECUTE.
2. 横向合并(连接数据集)
横向合并是指将两个或多个数据集水平连接在一起,形成一个更宽的数据集。
假设有两个数据集 data1.sav
和 data2.sav
,它们具有共同的关键变量 ID
,想将这两个数据集横向合并成一个数据集,可以使用以下 SPSS 语法:
* 横向合并两个数据集。
GET FILE='C:\path\to\your\file\data1.sav'.
MATCH FILES /FILE=* /TABLE='C:\path\to\your\file\data2.sav' /BY ID.
EXECUTE.
3. 合并时处理缺失值
假设想在横向合并时,如果ID
在其中一个数据集中不存在,则保留另一个数据集中的记录,可以使用以下 SPSS 语法:
* 横向合并两个数据集,保留所有记录。
GET FILE='C:\path\to\your\file\data1.sav'.
MATCH FILES /FILE=* /TABLE='C:\path\to\your\file\data2.sav' /BY ID /RENAME (var1=data1_var1 var2=data1_var2) /KEEP=ALL.
EXECUTE.
4. 使用 MERGE FILES 命令进行合并
MERGE FILES
命令也可以用来进行横向合并。假设有两个数据集 data1.sav
和 data2.sav
,它们具有共同的关键变量 ID
,可以使用以下 SPSS 语法:
* 使用 MERGE FILES 命令进行横向合并。
GET FILE='C:\path\to\your\file\data1.sav'.
ADD FILES /FILE=* /FILE='C:\path\to\your\file\data2.sav' /BY ID.
EXECUTE.
数据拆分
1. 按变量值拆分数据集
假设想按 gender
变量的值将数据集拆分成两个数据集,可以使用以下 SPSS 语法:
* 按 gender 变量的值拆分数据集。
SORT CASES BY gender.
SPLIT FILE
/SEPARATE BY gender.
2. 拆分数据集并保存为多个文件
假设想按 gender
变量的值将数据集拆分成两个文件 male_data.sav
和 female_data.sav
,可以使用以下 SPSS 语法:
* 按 gender 变量的值拆分数据集并保存为多个文件。
DO IF (gender = 'M').
SAVE OUTFILE='C:\path\to\your\file\male_data.sav'.
ELSE IF (gender = 'F').
SAVE OUTFILE='C:\path\to\your\file\female_data.sav'.
END IF.
3. 拆分数据集并分别进行分析
假设想按gender
变量的值将数据集拆分,并分别进行描述性统计分析,可以使用以下 SPSS 语法:
* 按 gender 变量的值拆分数据集并分别进行描述性统计分析。
SORT CASES BY gender.
SPLIT FILE
/SEPARATE BY gender.
* 描述性统计分析。
DESCRIPTIVES VARIABLES=age income
/STATISTICS=MEAN STDDEV MIN MAX.
* 结束拆分。
SPLIT FILE OFF.
4. 使用 SPLIT FILES 命令进行多变量拆分
假设想按 gender
和 region
两个变量的值将数据集拆分,可以使用以下 SPSS 语法:
* 按 gender 和 region 变量的值拆分数据集。
SORT CASES BY gender region.
SPLIT FILE
/SEPARATE BY gender region.
* 描述性统计分析。
DESCRIPTIVES VARIABLES=age income
/STATISTICS=MEAN STDDEV MIN MAX.
* 结束拆分。
SPLIT FILE OFF.