CGSS多期数据怎样合并:2021与2023混合截面整理方案
把 CGSS 2021 和 CGSS 2023 拼成一张表,最容易犯的错不是合并命令写错,而是把两批不同的人当成了同一个人的两次观测。CGSS 是连续性截面调查(repeated cross-section),每年抽的是新的样本,年与年之间没有个体追踪关系。合并后的数据只能做「年份之间的比较」,不能做「个体层面的变化」——一旦按 id 跑固定效应或算「某人两年间的变化」,结论就是假的。
确认了这一点,接下来的活才是技术性的:变量对照、编码统一、标记追加、权重处理。下面按这四步拆,每一步都给出判断依据和检查方法。
两年的数据规模与结构差在哪
先把两年摆在一起看,差异一目了然(数字取自 CNSDA 项目页的项目文档信息):
| 项目 | CGSS 2021 | CGSS 2023 |
| 有效样本量 | 8,148 | 11,326 |
| 变量数 | 700 | 437 |
| 调查模式 | 面访 | 面访+电话调查 |
| 抽样程序 | 多阶分层抽样 | 面访用多阶分层抽样;电话调查用「固定样本+RDD」 |
| 分析单位 | 个人、家庭 | 个人、家庭 |
| 覆盖与年龄 | 中国大陆,18+ | 中国大陆,18+ |
| 项目编号 | 65635422 | 11256439 |
| 随数据发布的文档 | 问卷(PDF)、Stata、SPSS 各一份 | 入户问卷 PDF、电话问卷 PDF、2023 编码表 Excel、CGSS2010—2023 采访地点统一编码表 PDF、Stata 数据 |
三处差异会直接决定合并方案。
第一,变量数从 700 掉到 437,意味着 2023 并不是 2021 的超集,不能「以 2021 为模板补齐」;共同变量得靠编码表逐个对。
第二,2021 只有面访,2023 是面访+电话双模式,同一份问卷在两套模式下可能触发不同的跳转逻辑,缺失值形态会不一样。
第三,2023 多了一份「CGSS2010—2023 采访地点统一编码表」,这是跨年合并最省事的一份材料——地点类变量(省、市、区县)的编码在各年之间有变动,用这份统一码表对齐,比自己去猜代码含义可靠。
第一步:拿编码表做变量对照
不要凭变量名合并。CGSS 的变量名(如 a 系列人口属性、q 系列态度题)在年际间大体稳定,但题号会调整、选项会增减,光看名字对齐很容易把「5 级量表」和「7 级量表」拼到一列里。
正确做法是建一张三列对照表:变量名(21)/变量名(23)/是否可比。判断「可比」的标准有三个——题干问的是不是同一件事、选项集合是否一致、取值范围是否一致。三者齐了才算直接可比;题干相同但选项变了(比如增加了「不好说」),只能算「需重编码后可比」;题干变了就是不可比,即使变量名相同也不能合。
这一步最花时间,但省不掉。实际操作中可以先把两年编码表(2023 的编码表是 Excel,2021 的编码表在问卷 PDF 里)并排打开,只挑你模型里要用的那十来个变量做对照,而不是全表对齐——全表对齐既没必要,也容易出现「看起来对齐了其实含义不同」的错觉。
第二步:统一缺失编码与「不适用」
合并后最常见的错误结果,是某个变量在合并数据里「样本量突然变大」。原因通常是两边的缺失编码不一致:一年用负数(-1、-2、-3 分别表示不知道、拒答、不适用),另一年用 8/9 或 98/99,还有的年份直接把「不适用」写成空白。合并时如果只做 append 不做重编码,这些码会被当成有效数值进入回归。
处理顺序建议是这样:先把各年的特殊码全部映射成统一的一套(例如 -1 不知道、-2 拒答、-3 不适用、-8 其他缺失),并保留一份原始码在新变量里(如 q1_raw),再做数值化。保留原始码这一步救过很多人——等你发现某个变量均值异常时,回头还能查是哪种缺失混进来了。
第二件要注意的是跳转题。CGSS 有大量「如果上一题选 A 则回答本题」的结构,2023 的电话模式在跳转实现上与面访不完全一致,同一个人群在两种模式下「不适用」的比例可能差很多。检查办法很简单:合并后按年份、按调查模式分别算每个关键变量的缺失率,如果 2023 电话样本的缺失率明显异常,就要怀疑是模式效应而不是真实差异。
第三步:追加年份标记与调查方式标记
合并前一定要加两个变量,这不是可选项。
第一个是年份标记(year,取 2021/2023)。没有它,合并数据就是一堆无法区分来源的行,任何「按年比较」的分析都做不了。
第二个是调查方式标记。2023 有面访与电话两种模式,而 2021 只有面访,所以这个变量的取值集合在两年之间天然不同。它的用途是做敏感性分析:把 2023 的电话样本剔除后重跑一遍,如果结论大变,说明你测到的「年份差异」里混了「模式差异」。
除了这两个,还建议加一个「原始数据来源」标记(记录是哪一个项目编号的数据),以及一个行序号(合并后行序会被打乱,出问题时靠它回溯到原始文件)。
第四步:纵向合并与权重处理
Stata 里是 append,R 里是 bind_rows,Python 里是 pd.concat——命令本身没有难度,难在合并前后的检查。
合并前检查三件事:两边变量名是否已经统一到同一套(建议直接在合并时重命名,别指望事后补)、两边类型是否一致(数值 vs 字符,尤其注意「未处理过的字符型变量」这类情况)、两边是否有同名但含义不同的变量(这类必须先改名,否则合并会把两列悄悄并成一列)。
合并后检查三件事:总行数是否等于两年之和(8,148+11,326=19,474,对不上就是有行被丢)、每列的缺失率是否落在预期范围内、关键变量的取值范围是否仍然合理(比如年龄段不该出现负数或 999)。
权重是最容易被忽略的一块。CGSS 各年会提供设计权重与事后分层调整,但 2023 因为有电话样本,权重的构造口径与纯面访年份不同。合并后如果直接用一套权重做加权,等于假设两年的权重含义相同——这个假设通常不成立。稳妥的做法是:分年加权做描述统计,合并样本里把权重当作「分年内可比、跨年需谨慎」的变量处理,并在方法部分写明你用的是哪一套权重、有没有做跨年可比性检查。
合并后必须报的三件事
第一,分年描述统计表。样本量、关键变量的均值与缺失率按年分别列,读者才有办法判断「年份差异」是不是样本结构变化造成的。
第二,模式敏感性。2023 剔除电话样本后重跑主模型,把两套结果并排给出。这一步做了,审稿人基本不会再追问「你的年份效应是不是问卷模式效应」。
第三,可比性说明。明确写清这是混合截面不是追踪面板、哪些变量因为选项变化做了重编码、哪些变量因为不可比而被放弃。这一段不是免责声明,是让读者能判断你的结论边界在哪。
顺带一句:如果研究问题本质上是「同一批人随时间怎么变」,CGSS 就不是合适的 data——它是重复截面,没有个体追踪。这种问题该去找有追踪设计的调查(如 CFPS、CHARLS 一类),而不是硬在 CGSS 上凑。
────────────────
回复本帖,可见 CGSS 2021 与 2023 两个数据集在 CNSDA 的官方项目页与编号、下载与注册流程、官方的数据引用说明原文,以及本帖整理的变量对照表模板(含可比性判定列)与合并后的检查清单,方便你直接照着做一遍。
把经管之家装进你常用的 AI 智能体中 一键快捷安装经管之家 MCP/技能,让 AI 帮你查教程、找数据、读论坛帖子。 检索、阅读公开帖子不收费,安装可申请领取:3 通用积分+100 论坛币+3 元论坛资金 请点击查看安装教程与福利 → 说明: AI 算力按所用平台规则计算;附件按原帖条件获取;福利领取条件以活动页面为准。 |