☰
SPSS数据合并全攻略:纵向合并与横向合并的实操指南
2026/10/2 5:05:53 网站建设 项目流程

1. 数据合并前必须想清楚的一件事:纵向还是横向

刚接触SPSS的人,十有八九会在“合并数据”这一步卡壳。其实数据合并没有那么玄乎,用一句话概括:纵向合并是往表格下面添行,横向合并是往表格右边添列。但问题恰恰出在这里——很多人连自己的数据到底该往下添还是往右添都没想明白,就打开了菜单,结果合并出来的数据一团乱。

先看两个最常见的场景。

场景一:你做了一份500份的问卷,但录入时分成了5批,每批100份,分别存成了5个SPSS文件。这5个文件里的变量名、变量顺序、变量类型完全一样,只是装的是不同人的数据。你现在想把它们拼成一个500行的完整数据文件——这就要用纵向合并(SPSS里叫“添加个案”)。

场景二:你手里有两份数据,一份是人口学变量(性别、年龄、学历),一份是量表得分(每一项的评分),两份数据的编号ID一一对应,但变量完全不同。你想把两份数据拼成一张宽表,每个人的所有信息都在同一行里——这就要用横向合并(SPSS里叫“添加变量”)。

之所以强调“想清楚再做”,是因为合并思路搞反了的后果非常严重。如果你该用纵向合并的时候用了横向合并,SPSS会把本该变成行记录的个案强行并排放置,导致样本量不变但变量数翻倍,后面所有分析全乱套;反过来,该横向合并时用了纵向合并,SPSS会认为这是不同个案,直接把变量当成缺失值堆在一起,数据彻底报废。

我在实际工作中见过太多人栽在这第一步,所以这篇教程不急着讲操作,先把这个核心逻辑掰开揉碎讲清楚。你只要记住一句话:看你的数据是“不同的行”还是“不同的列”要拼到一起。不同的行要拼成一个完整样本池,这是纵向;不同的列要拼成一整条样本记录,这是横向。

判断方法也很简单:拿起一张纸,把你的目标数据结构画出来。目标表里有几行、几列?哪些内容来自文件A,哪些来自文件B?来自A的就是行方向扩展,来自B的就是列方向扩展,一目了然。

下面进入正题,先说纵向合并,因为它逻辑最直白,适合拿来建立“合并”的整体感觉。

2. 纵向合并实操:把多批次数据“叠罗汉”变成完整样本

纵向合并在SPSS中的官方说法是“添加个案”,对应的英文是Add Cases。它的本质就是把若干个数据结构相同或兼容的数据文件,按照相同变量名上下堆叠在一起,最终形成的文件行数等于各文件行数之和、列数不变。

2.1 什么时候必须用纵向合并

除了前面说的“问卷分批录入”之外,纵向合并还有几个高频使用场景:

  • 面板数据的多年份拼接:你每年收集一次同一个群体的数据,每年存一个文件,最后要合并成一个多年份的大样本,年份作为其中一个变量。这个是典型的纵向合并。
  • 多地区数据的汇总:不同城市的分公司各自上报一份数据,数据结构由总公司统一下发,上报后需要在总层面合并分析。
  • 预调查与正式调查数据合并:你先做了30份预调查,问卷没改动,后来正式收了300份,两份数据可以直接纵向合并成330份。
  • 分次导出的大批量数据:系统导出的数据量太大被拆成多个Excel/SPSS文件,合并时也是纵向。

这些场景的共同特征是:每一条观测就是一个独立的个案,把它们堆在一起,样本量变大,变量数量不变。

2.2 纵向合并的完整操作步骤

我用一个例子带你走一遍完整流程。假设你有问卷_第一批.sav和问卷_第二批.sav两个文件,变量都是ID、Q1、Q2、Q3、性别这5个,第一批200行,第二批300行,现在要合成500行。

第一步:打开其中一个文件作为“活动数据集”。这里的“活动数据集”是SPESS里的核心概念,很重要——合并后的结果会保留在当前打开的这个文件里,另一个文件只是被读取进来参与合并。

第二步:菜单路径是:数据 → 合并文件 → 添加个案。

第三步:SPSS会弹出一个对话框,询问你要合并哪个文件。这里有两个选项:一是“打开的数据集”,下拉菜单里可以选当前已经打开的其他SPSS文件;二是“外部SPSS数据文件”,如果你要合并的文件还没打开,就点“浏览”去选。建议直接点“浏览”选外部文件,省得先打开一堆窗口,视图区乱了也容易误操作。

第四步:选好文件后,点“继续”,进入关键界面。这个界面分两块:

  • 左侧“非活动数据集中的变量”:显示另外一个文件里、但当前活动文件中没有的变量。
  • 右侧“活动数据集中的变量”:显示当前打开文件的变量列表。

系统默认会选中两份文件中“变量名完全一致”的变量,这些一致变量会自动匹配,不需要你干预。不一致的变量会分别留在左右两栏里。

第五步:决定不一致的变量怎么处理。这里推荐一个实用做法:如果这些变量确实在另一批数据里没有采集,就直接保持默认,不要动。SPSS合并时,对于两边不匹配的变量,会自动生成新变量,缺失的那端用系统缺失值填充。比如第二批数据多了一个备注变量,合并后,第一批的所有个案在备注上都是缺失值,这完全正常。

但如果你发现左右两栏里有些变量其实是同一个变量,只是因为名字拼写不一样导致SPSS认不出来,比如一边叫sex另一边叫性别,那就需要手动配对:先把左边那个变量选中,再选中右边对应的变量,然后点中间的“配对”按钮,把它们指定为同一变量。这一步极其关键,很多人合并出来的数据性别变成两列,就是因为没做配对。

第六步:点“确定”。大功告成。

第七步(强烈建议):合并完成后,立即做三件事检查:

  1. 在数据视图里看行数是否等于两文件行数之和;
  2. 在变量视图里看列数是否合理、有没有多出一堆莫名其妙的新变量;
  3. 用描述统计快速抽查几个关键变量的均值、缺失值数量,确认数据没有串位。

这步检查不是走形式,是因为合并操作是破坏性操作——虽然SPSS会在结果查看器中输出日志,但数据文件本身一旦被合并逻辑污染,后面再想找回原来的拆分状态就麻烦了。所以我个人的习惯是:操作之前先把原始文件备份一份。

2.3 纵向合并中“变量名一致”等匹配规则的细节

有一个细节值得单独拿出来说:合并时SPSS判断“哪些变量是一伙的”,只认变量名,不认变量顺序,也不完全认变量类型。变量名相同的两个变量会被自动对应上;变量名不同但内容相同的,必须你自己手动配对。

变量类型这一点要格外小心。SPSS里数值型变量和字符串型变量虽然都叫“性别”,但如果一边是数值1/2编码、另一边是字符串“男/女”,它们在合并界面里不会自动匹配成功,有些版本会直接报错,有些版本会把它们当成两个不同变量处理。解决办法是合并前统一编码方案:要么全部转成数值型并统一值标签,要么全部转成字符串型。我个人的建议是——问卷数据尽量在录入阶段就用数值编码,后面合并、分析、图表都会省心得多。

再说一个容易忽略的问题:变量顺序不同会影响合并结果吗?答案是不会。SPSS按变量名匹配而不是按第几列匹配。哪怕第一批文件里性别在第一列,第二批文件里性别在最后一列,合并后也会正确归位到同一列。这一点比Excel里直接复制粘贴要安全得多。

2.4 一个容易犯的错:把“拼接”做成“横向”

我做数据分析培训时,经常收到学员发来的合并求助,一看截图就明白问题出在哪——他们要的是把500份问卷拼成一个文件,结果操作时点了“添加变量”,看到生成的文件行数还是200,但变量数翻了一倍。

记住这个判断技巧:纵向合并完成后,去看数据视图的行数。如果行数等于两文件行数之和,说明成功了;如果行数没变,变量数却变多了,那一定是选错了菜单。这个时候赶紧撤销(Ctrl+Z),别将错就错继续分析。

3. 横向合并实操:把两侧数据“手拉手”拼成完整记录

横向合并,SPSS里的官方说法是“添加变量”,英文是Add Variables。它做的事情是:根据一个或多个键变量(Key Variables),把两份数据按“同一个人/同一条记录”对齐,然后把右边的变量并到左边的文件里,最终行数不变、列数增加。

3.1 键变量:横向合并的灵魂

横向合并和纵向合并最大的区别,在于它对“数据是否来自同一条观测”是有要求的。换句话说,你必须有办法告诉SPSS:“第一份数据的第3行”和“第二份数据的第3行”是同一个人。

这个“告诉SPSS”的桥梁,就是键变量。它通常是ID、编号、学号、工号等唯一标识符。

没有键变量的横向合并也能做,但那个叫“按行号顺序一对一硬拼”(后面会细讲),默认情况下SPSS会要求你指定键变量,否则最后出来的数据很可能是让个案乱配对,这是灾难级错误。

3.2 一对一的横向合并完整操作步骤

依然用例子说话。假设你有一个被试基本信息.sav,包含ID、性别、年龄;还有一个被试量表得分.sav,包含ID、焦虑得分、抑郁得分。两份数据都是同一批被试,ID一一对应,现在要合成一个完整宽表。

第一步:打开被试基本信息.sav作为活动数据集。 第二步:菜单路径:数据 → 合并文件 → 添加变量。 第三步:选择另一个数据文件被试量表得分.sav,点“继续”。 第四步:在对话框里找到“键变量”区域。默认情况下SPSS会把你两个文件里都有的变量名列出来(比如ID),并把它们自动放进键变量框中——这正是我们要的效果。

注意:键变量不会被合并成重复的两列,而是作为两边的匹配桥梁,最后在合并结果里只保留一列。

第五步:检查“非活动数据集中的变量”和“活动数据集中的变量”两个列表。与纵向合并类似,SPSS会对两个文件里所有变量名相同的变量自动匹配,不一致的变量会留在各自的栏里。对于相同名字的变量,如果它不是键变量,SPSS会默认把非活动数据集里那个变量重命名(比如在变量名后加数字或后缀),避免冲突。 第六步:确定。合成了。

同样地,合并后要检查:行数应该和原来两份数据一致(假设ID完全匹配),列数等于两文件变量数之和减去共享键变量数(因为键变量只保留一列)。

3.3 一对多合并:一个文件有唯一记录,另一个文件有多条记录

现实中横向合并常遇到一个棘手情况——两边的个案数不一样多。

举个例子:你有班级信息表(每个班一行,包含班主任、教室号),还有学生信息表(每个学生一行,包含班级号、姓名、成绩)。如果想把班级信息合并到学生信息表里,就会遇到“一个班对应多个学生”的情况,这是一对多合并。

SPSS添加变量的对话框里没有显式的“一对多”按钮,但它的处理逻辑很简单:你在键变量里指定的变量能匹配上,就合并;匹配不上的,要么保留为缺失,要么被丢弃。

具体操作和一对一完全相同,只是键变量的角色变成了“班级号”。比如活动数据集是学生信息表,非活动数据集是班级信息表,键变量选班级号。合并结果是每一行学生数据后面带上了自己班级的班主任和教室号。哪个班有30个学生,那30行后面就是同样的班级信息。

反过来,如果你把班级信息表作为活动数据集、学生信息表作为要合并的文件,那将是“一个学生匹配一个班”,每个班如果有多条学生记录,SPSS会默认只保留第一条匹配到的学生信息,其他学生数据被丢弃——这基本就是数据事故了。所以合并时一定要想清楚谁是“主表”。在非一对一的匹配条件下,主表决定最后保留哪些行。

3.4 没有键变量时强行横向合并会发生什么

有一种情况比较特殊:两份数据行数完全相同、顺序也完全一致,但没有ID。这时候你可能会想“反正行数一样,直接拼就行”。

SPSS确实允许没有任何键变量的横向合并,它会把两份数据按行号位置一一对应拼接。看起来方便,但这么做的前提是:你百分之百确定两份数据的行顺序含义完全一致。什么叫一致?比如一份是“按提交时间排序的问卷数据”,另一份是“按录入顺序排列的访谈编码”,你确定第1行和第1行是同一个人吗?一般很难确定。

我的建议是:能不用行号硬拼就不用。哪怕手动在Excel里加一个序号列,也比直接硬拼安全一百倍。这个序号就充当ID,之后就算顺序打乱也能恢复。

4. 用语法实现合并:更可控、更高效、更值得掌握

很多人觉得菜单操作挺方便,但数据合并这个场景,我强烈建议你掌握语法方式。原因有三:一是菜单操作每次都要重新点一遍,数据文件多的时候效率极低;二是语法可以完整记录你的操作过程,复盘、修改、复用都方便;三是语法方式对“变量如何匹配”的控制更精确,减少误操作的可能。

4.1 纵向合并语法:ADD FILES

纵向合并对应的语法是ADD FILES。基本格式如下:

ADD FILES FILE='C:\data\问卷_第一批.sav' FILE='C:\data\问卷_第二批.sav'. EXECUTE.

就这么简单。SPSS会把FILE=后面列出的所有文件按变量名对齐,纵向堆积。

如果你需要对变量进行重命名后再合并,用RENAME子命令,比如:

ADD FILES FILE='C:\data\问卷_第一批.sav' FILE='C:\data\问卷_第二批.sav' /RENAME (sex=性别). EXECUTE.

注意,RENAME的括号里左边是旧名,右边是新名,执行后SPSS会尝试按新变量名匹配。

还有一点很实用:ADD FILES并不要求所有文件必须事先打开,它直接在FILE=里指向磁盘路径即可。这意味着你完全不需要在用户界面里打开一大堆文件再合并,省内存也不容易乱。

4.2 横向合并语法:MATCH FILES

横向合并对应的语法是MATCH FILES。一对一合并时用BY指定键变量即可:

MATCH FILES FILE='C:\data\被试基本信息.sav' FILE='C:\data\被试量表得分.sav' BY ID. EXECUTE.

SPSS会先按ID对两个文件排序(如果没排序,它在合并过程中会自动处理),然后把同ID的变量并到一行。

这里有一个实操要点:MATCH FILES要求每个输入文件都按键变量升序排列,否则可能报错或者匹配错乱。虽然界面操作和最新版本会自动内部排序,但在大批量数据处理时,最好还是自己先对每个文件用SORT CASES BY ID升序排一遍,再执行合并,稳定性会好很多。

如果遇到一对多合并,语法同样适用。先确保主表在前,次表在后,BY指定关联变量。比如把班级信息合并进学生信息:

SORT CASES BY 班级号. EXECUTE. MATCH FILES FILE='C:\data\学生信息.sav' FILE='C:\data\班级信息.sav' BY 班级号. EXECUTE.

系统会按班级号把班级信息复制到每个匹配的学生行里。

4.3 舍弃不需要的变量

实际合并时经常出现“附带了一堆不想要的变量”的情况。语法方式可以在合并时直接用KEEP或DROP筛选变量,这一招在菜单操作里很难实现,但语法只需要加一行:

MATCH FILES FILE='C:\data\被试基本信息.sav' FILE='C:\data\被试量表得分.sav' BY ID /DROP= 备注 录入员. EXECUTE.

KEEP和DROP的规则是:KEEP优先于DROP,先KEEP后DROP。建议合并完成后先跑一遍FREQUENCIES看看变量清单,再决定哪些该删。

5. 合并中常见的坑:完整的排查链路与避坑清单

最后这章,把我这几年实际遇到的高频问题做个汇总。每个问题都按“现象-原因-排查方向-解决方案”的思路展开,你可以直接对照自查。

5.1 合并后个案数“变多”或“变少”

现象:纵向合并后行数不是A+B而是A+B+几十行;或横向合并后行数明显少于主表。

原因:

  • 纵向合并时,两份数据里都有个别重复ID,但你把ID当成普通变量合并,SPSS不会检查重复,行数异常大概率是你原始文件本身就有重复。
  • 横向合并且不是一对一匹配时:主表里的某条记录在次表里有多个匹配项,多出来的是次表扩展的;行数少了则是主表里有些键值在次表里不存在,被系统丢弃。

排查方向:

  1. 先对两份数据各自做“重复ID检查”,用数据 → 标识重复个案,看看重复值在哪里。
  2. 再看合并对话框里“包括非匹配个案”之类的选项(不同版本文字有差异),确认你是否勾选了非匹配案例。

解决方案:如果是重复ID导致的,先处理重复个案再合并;如果是键变量不匹配,回到原始文件里查ID为什么对不上。

5.2 合并后“性别”变成两列:变量类型或名称不一致

现象:横向合并后,本来该合并成一个的变量变成两个变量名(如性别和sex都保留)。

原因:两个文件中同一个概念的变量名或变量类型不一致,SPSS不认为它们是同一个变量。

排查方向:打开两个文件的变量视图,对比变量名、类型、宽度三重属性。只要有一个属性不一致,SPSS就可能不匹配。

解决方案:合并前统一变量名和类型。我的习惯是在SPSS语法里用RENAME统一变量名,用ALTER TYPE调整类型,然后再合并。

5.3 横向合并后变量取值全部错位

现象:合并后,某一行ID=5的人,量表得分却像是ID=8的。

原因:几乎可以断言,你没有指定键变量,按行号硬拼了。两份数据排序方式不同,行号根本不对应。

排查方向:看合并语法里有没有BY语句;如果用菜单,看键变量框里是否空白。

解决方案:取消合并,找到能代表同一条记录的键变量,重新合并。如果实在没有,去原始数据源找ID,不要硬拼。

5.4 纵向合并后出现大量系统缺失值

现象:合并后数据视图里很多单元格显示.(系统缺失值),比原始数据里的缺失值多得多。

原因:两份数据的变量集合不完全一致,合并后缺失的那部分个案对应的变量全为空。这是正常现象,但如果缺失值多到影响分析,就得检查是不是某批数据的采集质量有问题。

排查方向:对合并前后的缺失值占比做对比,看缺失值是否集中在某一个原始文件来源。

解决方案:如果是采集遗漏,回去补数据;如果确实没采集,这个变量在后来的分析中需要做缺失处理,或者直接剔除该变量。

5.5 合并时文件被占用、无法读取

现象:点“确定”后提示文件正在使用、无法访问。

原因:同一份SPSS文件被另一个窗口或另一个程序(比如Excel)占用了。SPSS的数据文件在打开状态下被锁定,跨程序同时打开也会出现类似问题。

解决方案:关掉其他引用该文件的地方再重试。如果是外部文件,确认它在磁盘里没被设为只读。

5.6 合并后变量名带上了奇怪的数字后缀

现象:比如合并后出现性别1、Q2_1这样的变量名。

原因:变量名冲突但内容不同。SPSS为了不丢数据,自动给非活动数据集里重名的变量加了后缀。这通常是正常的,但它也提示你:两边的“性别”可能不是同一个含义的东西。

排查方向:看变量视图里的变量标签,确认冲突变量的实际含义。

解决方案:如果两边确实是同一变量,合并前用RENAME统一变量名;如果含义不同,保留后缀、重命名清楚,避免分析时混淆。

写在最后的小建议

总结下来,整个数据合并的操作难度其实不高,真正考验人的是合并前的判断和数据管理习惯。我个人的习惯是:每一次合并前先在纸上画出合并后的目标数据结构,标清楚哪些行来自哪、哪些列来自哪、用什么键变量连接,然后才动手操作。这个过程看起来繁琐,但它能救你于水火之中。

另外,合并后的数据文件我从来不会直接覆盖掉原始文件。哪怕合并逻辑再简单,我也会另存为“合并后_xxx.sav”,因为后续如果发现哪个环节出了问题,还能回得去。这个习惯帮我避免了好几次返工的灾难,真心建议你也养成。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询