基于自定义识别码合并Qualtrics多份数据集的SPSS技术问询
问题与解决方案
背景
用Qualtrics向儿童发放3份调查:
- 最初采用10位随机码作为跨调查识别凭证,预测试发现儿童无法记住该码,改为让参与者自行生成格式为
SchoolName-YearGroup-FirstInitial-DayOfBirth的易重复识别码 - 所有参与者完成调查1和2,仅部分完成调查3,需通过该识别码合并三份调查的记录
- 限制:Qualtrics无法直接基于该字段合并,数据集过大无法手动合并,禁止收集邮箱,不能使用Qualtrics邮箱关联方案
- 尝试SPSS
MATCH FILES命令未生效,命令如下:
MATCH FILES /FILE='path_to_survey2.sav' /BY ParticipantCode. EXECUTE.
SPSS 正确合并方法
你之前的MATCH FILES命令只调用了单个文件,这是无效的,正确操作如下:
1. 预处理数据
确保三份数据集的识别码字段名称完全一致(如统一为ParticipantCode),且格式统一:
* 统一识别码格式:去除首尾空格、转大写. COMPUTE ParticipantCode = UPCASE(LTRIM(RTRIM(ParticipantCode))). EXECUTE. * 按识别码排序,确保合并时匹配正确. SORT CASES BY ParticipantCode. EXECUTE.
2. 逐步合并数据集
先合并调查1和2,再将结果与调查3合并:
* 合并调查1与调查2,保留所有完成两份调查的参与者. MATCH FILES /FILE='path_to_survey1.sav' /FILE='path_to_survey2.sav' /BY ParticipantCode. EXECUTE. SAVE OUTFILE='merged_survey1_2.sav'. * 合并上述结果与调查3,用IN子句标记是否完成调查3. MATCH FILES /FILE='merged_survey1_2.sav' /FILE='path_to_survey3.sav' /BY ParticipantCode /IN=completed_survey3. EXECUTE. * 将标记转为0/1变量,1表示完成调查3,0表示未完成. COMPUTE completed_survey3 = completed_survey3. EXECUTE. SAVE OUTFILE='final_merged_data.sav'.
Python(Pandas)高效合并方案
如果SPSS处理大数据卡顿,可使用Pandas,操作更高效:
1. 读取并预处理数据
import pandas as pd # 读取三份SPSS数据 survey1 = pd.read_spss('path_to_survey1.sav') survey2 = pd.read_spss('path_to_survey2.sav') survey3 = pd.read_spss('path_to_survey3.sav') # 统一识别码格式 for df in [survey1, survey2, survey3]: df['ParticipantCode'] = df['ParticipantCode'].str.strip().str.upper()
2. 合并数据集
# 合并调查1和2 merged_1_2 = pd.merge(survey1, survey2, on='ParticipantCode', how='inner') # 合并调查3,左连接保留所有已合并的参与者,标记完成状态 final_merged = pd.merge(merged_1_2, survey3, on='ParticipantCode', how='left', indicator=True) final_merged['completed_survey3'] = final_merged['_merge'].map({'both': 1, 'left_only': 0}) final_merged.drop(columns='_merge', inplace=True)
3. 保存结果
# 保存为SPSS格式,兼容后续SPSS分析 final_merged.to_spss('final_merged_data.sav', convert_categoricals=True) # 或保存为CSV,适合其他工具处理 final_merged.to_csv('final_merged_data.csv', index=False)
额外注意事项
- 排查识别码重复问题:若存在多个参与者使用同一识别码,可通过性别、年龄等辅助字段区分,或手动核实修正
- 若合并后出现缺失值,需检查识别码的拼写一致性(比如学校名称缩写不一致、出生日期格式错误等)
内容的提问来源于stack exchange,提问作者Sophie
相关产品推荐
相关产品推荐

