简介:中国老年社会追踪调查(CLASS)2011—2023年多轮微观个体数据整理包,面向老年学、社会学、公共健康等领域的科研人员与高校师生,可用于分析老年人健康、经济状况、养老资源、家庭与社会参与等议题。资源包含1个docx文档,压缩包大小51KB,文档内提供百度网盘链接(约1GB数据),涵盖2011、2012、2014、2016、2018、2020、2023年调查数据,并附详细问卷与数据说明。已有276人学习下载。相比单年截面数据,该资源将多年追踪数据集中整理,便于研究者进行纵向比较与趋势分析;文档还提炼了CLASS公开报告中的关键统计结果,如低龄老人占比、慢病患病率、养老金覆盖率等,可作为论文引言或研究背景的参考素材。
用SPSS和Stata拆解CLASS微观数据,我整理了这套老年健康与养老分析的完整思路
这几年做老年健康与养老相关的微观数据分析,CLASS(中国老年人社会追踪调查)是我用得最顺手的一套数据之一。从2011年首轮启动到2023年,七个波次完整覆盖了老龄化的关键变化阶段,样本量总体过万,变量设计横跨健康、经济、家庭、社会参与多个维度。如果你正准备用CLASS写论文、做课题,或者只是想把手头这批微观数据挖出价值,那这篇实操向的拆解应该能帮你少走不少弯路。
我先交代一下自己的背景:社会学量化研究方向,过去三年主力处理CLASS、CHARLS、CFPS这几套大型调查数据。本文会结合我自己处理CLASS 2011-2023年数据时的真实操作流程,围绕SPSS和Stata两个软件的具体用法展开,不铺垫理论,直接讲实操思路和踩坑记录。
1. 数据整体认知与使用场景定位
1.1 CLASS数据覆盖范围与独特价值
CLASS是由中国人民大学中国调查与数据中心负责实施的大型追踪调查项目,我对比过CHARLS和CFPS,CLASS在很多维度和别的数据库有明显差异化优势。最突出的一点是它专门围绕“老年人”这个群体做深度设计,并不追求全年龄层覆盖,而是把六十岁及以上人群的健康状况、经济来源、家庭结构、社会参与、养老观念全部浓缩进一套问卷体系里。
我自己通常先把七个波次的框架整理清楚再动手分析。2011年属于基线调查,样本覆盖全国28个省级单位,有效样本大概在一万一千人左右;2012年开始有追踪访问机制;2014、2016、2018、2020、2023每两到三年一轮,波次间虽有样本损耗,但核心模块保持高度一致。这种多波次结构非常利于做跨期比较,比如老年人自评健康变化趋势、代际经济支持流动方向的变化、社会参与率随年龄的衰减曲线这类问题,在CLASS里都能找到扎实对应的变量。
此外,CLASS还有一个极大优势——它的子女配对问卷。很多数据库只问老人自己,CLASS会额外访问子女,形成“老人-子女”双边数据。这一设计在做代际转移、养老责任分配、子女照护供给等话题时,价值远超一般的截面数据。用子女端变量去验证老人自报的家庭支持信息,还能做信度校验,这在论文评审时是很好的加分点。
1.2 适合用CLASS回答的研究问题举例
结合这些年用数据的实际感受,我整理了几类特别适合CLASS切入的研究方向:
- 健康与经济的交互作用:收入水平、消费结构对自评健康、慢性病数量的影响,或者反向探讨健康冲击对劳动退出、经济依赖的影响。
- 家庭养老资源研究:子女数量、居住安排、代际经济支持的实际金额与频率、照料供给的性别差异等。
- 社会参与与老年生活质量:社会组织参与、广场舞/锻炼频率、志愿活动等变量对抑郁倾向、生活满意度的影响。
- 养老观念与制度信任:老人对家庭养老、社会养老、商业养老保险的态度,以及这种态度是否受到过往制度经历的影响。
- 队列比较分析:不同出生队列在健康、经济、家庭支持上的系统性差异,这是多波次数据中最容易出亮点的一个方向。
实操建议:如果你用SPSS比较多,建议先做数据管理,把七个波次统一后另存为一份名为CLASS_merge_2024.sav的分析文件;如果你偏向Stata,直接用dta格式处理会更顺畅。两种软件在CLASS这种复杂问卷数据上并没有绝对的优劣之分,关键看你习惯哪套工作流。
2. 软件选择与分工思路:SPSS加Stata怎么配合着用
2.1 SPSS在CLASS数据处理中的适用边界
很多研究者面对CLASS数据时第一选择是SPSS,这很正常,菜单式操作对不熟悉编程的人非常友好。但坦白说,SPSS在CLASS这类多波次、多模块复杂数据上存在明显短板,主要体现在三个方面:
第一个短板是跨文件匹配效率低。CLASS数据通常按照主题模块拆分成不同文件,比如基础信息一个文件,健康模块另一个文件,家庭经济又单独一个文件。在SPSS里做跨文件合并虽然能通过“添加变量”功能完成,但每次都需要精确指定关键变量,当文件较多、变量名也不完全统一时,操作会非常耗时且容易出错。
第二个短板是面板数据的时间维度处理不够原生。CLASS的追踪属性要求分析者能够灵活处理“个体+时间”的双重结构,SPSS的传统菜单操作在这方面比较笨拙,比如要做个体内部的变化量,SPSS需要你先拆分文件、计算差值再合并回来,而Stata用xtset配合lag运算就能一步到位。
第三个短板是复杂抽样设计的支持有限。CLASS通过多阶段分层抽样获取样本,意味着分析时必须考虑抽样权重和聚类效应。SPSS虽然也有复杂抽样模块,但在稳健标准误、一阶自回归等高级推断上的灵活性和统计口径选择明显不如Stata方便。
所以我个人的习惯是:数据清洗、变量重编码、描述性统计交叉表用SPSS完成,一旦进入多元回归、面板模型、工具变量或者复杂加权推断阶段,立刻切换Stata,各用各的长处。
2.2 Stata强力补位:哪些分析非它不可
Stata在微观数据回归分析领域确实有一套高效工作流,尤其面对CLASS这种既有多期截面又有追踪子样本的数据结构时优势明显。我举几个典型的必用Stata场景:
第一,多期混合截面分析。当你把2011到2023七个波次的数据纵向堆叠成一个长表时,Stata可以通过简单的reg y x i.wave方式控制波次固定效应。这会告诉读者:在控制了时间趋势之后,核心解释变量的效应依然成立。
第二,面板数据分析。对那些被追踪到的、至少出现两次的个体,可以设置面板结构。用xtset id wave完成面板声明后,就可以跑固定效应或随机效应模型,解决一部分不随时间变化遗漏变量带来的内生性问题。
第三,倾向得分匹配与工具变量分析。CLASS并非随机实验数据,健康和经济状况之间往往互相影响。用Stata的psmatch2或teffects psmatch做倾向得分匹配,用ivregress 2sls做工具变量估计,能比单纯OLS更有说服力。
第四,边际效应可视化。老年健康分析里常需要展示年龄、收入与某种概率之间的非线性关系,Stata里的margins配合marginsplot可以非常直观地画出这种效应曲线。这个是SPSS完全没法快速实现的。
2.3 完整工作流的推荐顺序
我理一条自己经常走的实操路径,适合完整跑通CLASS一个分析课题:
- 用SPSS打开原始数据,做初步浏览和变量梳理,识别缺失值模式与异常值;
- 在SPSS中执行变量重编码、计算量表总分(比如抑郁量表CES-D的加总),用“转换-计算变量”完成;
- 对连续变量做描述统计,分类变量做频数表,交叉表辅助观察变量间粗糙关系;
- 将清洗后的数据导出为CSV格式,再用Stata读取为dta文件;
- 在Stata中完成样本筛选、生成新变量(如年龄分组、收入对数化、家庭支持总金额合并);
- 执行多期混合截面回归或面板回归,完成稳健性检验,输出回归表格;
- 用marginsplot绘制关键变量的边际效应图,用esttab导出规范的三线表。
补充说明:如果你更喜欢全程Stata,也没有问题。Stata做数据清洗虽然语法门槛高一些,但一切操作都留痕、可复现,这在学术规范不断收紧的当下实际是很加分的。
3. 核心分析模块拆解:健康、经济、家庭与社会参与
3.1 健康测量与多维健康指标构建
CLASS数据中健康变量的丰富程度很高,至少包含自评健康、工具性日常生活能力(IADL)、日常生活自理能力(ADL)、慢性病数量、认知功能、抑郁症状等多个维度。我常用的做法是先做一个健康综合指数,这样在回归分析中能用一个连续变量代表整体健康状态,减少多重共线性困扰。
具体操作路径是这样的:ADL和IADL在CLASS原始问卷中都是多项活动的“是否有困难”编码,我会先对每项活动生成一个二分变量(1=有困难/无法完成,0=无困难),然后加总得到受损项总数。自评健康保留原值或反向编码成“越高越健康”的方向。CES-D类型量表则按原始计分规则累加,注意不要漏掉反向计分条目。
如果你用的是SPSS,计算量表和可以通过菜单“转换-计算变量”直接加法完成,也可以借助“可靠性分析”检查内部一致性信度,再保存因子得分。简单点就加总原始分数,然后用Z分数标准化处理,将不同维度统一到同一量纲再做平均,得到健康综合指数。
用Stata的话,我的命令模板大致如下:
* ADL受损项加总 gen adl_sum = adl_bath + adl_dress + adl_eat + adl_toilet + adl_bed * 自评健康反向编码,假设原始1=非常好,5=非常差 gen health_rev = 6 - selfrated_health * 综合健康指数(标准化后平均) egen health_z1 = std(adl_sum) egen health_z2 = std(health_rev) egen health_z3 = std(depress_score) gen health_index = (health_z1 + health_z2 + health_z3) / 3这一模块的关键在变量方向统一,CLASS问卷中不同模块的正反向编码不一致,如果不仔细核对标签,很容易出现“健康指数越高代表越不健康”这种方向性错误。每次处理完变量后我都会先跑一遍简单的相关系数矩阵,看看方向上是否合理。
3.2 经济状况变量:收入、消费与养老来源
CLASS的经济模块包含个人收入、家庭总收入和支出、养老金(退休金)领取情况、房产拥有状况、子女经济支持等多个方面。由于老年人经济结构相对特殊,直接使用总收入往往会有比较明显的偏态,多数情况下需要做对数变换来压缩极端值。
数据处理上有一点需要特别注意:肯定的缺失值处理。CLASS问卷对“拒绝回答”“不知道”都会生成不同的缺失编码,在SPSS里需要将这些统一重定义为系统缺失值,否则平均数会被严重拉低。我一般在SPSS中使用“重新编码为相同变量”功能,把-1、-2这类编码替换为SYSMIS,再保存新数据。
在经济状况分析中,一个常见难题是如何处理“家庭总收入”中多个家庭成员贡献的分割。CLASS既有个人收入变量,也有家庭层面的汇总变量。如果你研究的是老年人个体经济福利,建议以个人收入加个人收到的转移收入为主;如果研究家庭养老资源的整体配置,则直接用家庭人均收入。
对养老资金来源的识别,CLASS详细记录了退休金/养老金、子女经济支持、政府补贴、个人劳动收入等来源。想区分“依赖型养老”和“自养型养老”,可以生成一个分类变量:
gen old_support_type = 1 if pension_share >= 0.5 replace old_support_type = 2 if children_share >= 0.5 & old_support_type == . replace old_support_type = 3 if work_share >= 0.5 & old_support_type == . replace old_support_type = 4 if old_support_type == . label define support_lb 1"养老金主导" 2"子女主导" 3"劳动主导" 4"其他" label values old_support_type support_lb用这个分类变量做多分类Logit模型,能比较不同类型老人的健康、居住安排差异,成文后内容非常饱满。
3.3 老年参与与家庭社会养老资源分析
老年参与维度是CLASS区别于一般健康调查的重点。这部分变量至少包括:是否参加社会活动(宗教、社会团体、志愿服务、锻炼队等)、是否照料孙辈、是否仍在参与劳动等。针对当前政策和社会热点,照料孙辈对老年人身心健康的影响是一个很适合用CLASS检验的课题。
我在分析照料孙辈与健康关系时发现,直接做reg health_index care_grandchild会得出“照料孙辈显著降低健康”的结论,但加入居住安排、年龄、经济支持等控制变量后,效应方向可能反转。原因很简单:与子女同住且身体较好的老人更容易被选中承担照料孙辈的角色,这是典型的选择性偏差。处理思路是采用倾向得分匹配,把照料孙辈视为处理变量,用年龄、性别、教育、健康状况、子女数量等做倾向得分估计,再做匹配后处理效应分析。
在Stata中我的做法大致如下:
* 倾向得分估计 logit care_grandchild age male edu income adl_sum urban /// child_num live_with_child predict pscore, pr * 最近邻匹配 psmatch2 care_grandchild health_index, pscore(pscore) /// outcome(health_index) neighbor(1) caliper(0.05) common需要说明的是,CLASS是观测数据,即便经过PSM处理,仍有不可观测混杂因素的风险。稳妥的做法是同时报告OLS、PSM和倾向得分加权三种结果,如果核心结论一致,行文的稳健性就很强了。
家庭社会养老资源这一块,特别值得说的是居住安排变量,CLASS清晰地记录了老人独居、仅与配偶同住、与子女同住、与孙辈同住等多种类型。这个变量几乎可以放进所有分析框架中作为核心解释变量或控制变量,因为它同时反映家庭社会功能、代际关系和经济共享程度。
4. 关键坑位与排查技巧:CLASS数据实操避坑指南
4.1 多波次数据合并时的匹配问题
我自己第一次处理CLASS多波次数据时,在合并环节踩了一个大坑。CLASS原始数据在不同波次上虽然保持了核心变量名的连续性,但并非所有变量在每个波次都存在。尤其是一些非核心模块(比如特定年份加入的心理量表、社会态度题组),在不同年份的原始文件位置、编码和变量名都可能发生变动。直接按变量名横向合并,极容易出现大量空值或错位。
我的标准做法是先建立一个“变量名-波次-编码说明”对照表。用Excel按年份分Sheet记录每个波次里关键变量的名称、标签、取值范围和缺失编码,然后再统一重命名。这个过程很枯燥,但能从根本上防止合并后变量错乱的问题。
如果是在Stata中纵向合并七个波次的数据,建议用append命令,但前提是每个波次的数据已经事先重命名成统一的变量名:
use class2011_clean.dta, clear append using class2012_clean.dta append using class2014_clean.dta append using class2016_clean.dta append using class2018_clean.dta append using class2020_clean.dta append using class2023_clean.dta * 生成波次变量 gen wave = 2011 replace wave = 2012 if wave == .append时要注意变量类型,比如同一个变量在2011年可能是byte类型,在2018年可能是int类型,类型不一致会导致字符串转换失败或数值截断。我建议在合并之前统一执行destring检查,将所有疑似数字变量明确转换。
4.2 样本加权与复杂抽样的处理思路
CLASS作为全国代表性调查,分析时是否使用抽样权重直接影响结论的外部效度。很多人忽略这一点,直接跑未加权回归,这在样本无响应比例较高的波次中可能带来明显偏误。
在涉及全国性描述统计(比如老年人自评健康“好”的比例到底是多少)时,一定使用权重。CLASS数据通常提供个人权重变量,可以在Stata中这样设定:
svyset [pw = weight], strata(province) psu(community_id) svy: mean selfrated_health但在做解释性回归的时候,是否必须加权存在方法论争议。我个人的习惯是:主回归报告未加权结果,稳健性检验里放加权结果,如果两者结论方向一致,就在注释里说明;如果不一致,则在讨论部分专门解释潜在原因。这既符合主流期刊的接受标准,也避免了一些不必要的审稿质疑。
4.3 缺失值的系统化处理方案
CLASS数据缺失较为常见,尤其是收入、子女经济支持这类敏感问题。处理缺失值前,务必先弄清缺失机制。如果变量缺失比例超过10%,直接删除样本会导致有效样本量骤减,此时建议用多重插补。
在Stata中使用多重插补,流程如下:
mi set wide mi register imputed income_ln adl_sum health_index mi impute mvn income_ln adl_sum health_index, add(20) mi estimate: reg health_index income_ln age male需要注意的是,CLASS的部分缺失是“设计性缺失”,例如没有子女的老人不会回答子女经济支持的相关题组。这种缺失不应该被随意插补,而应生成一个“是否适用”的筛除变量或单独建模。实际操作中我会先查看每个核心变量的回答样本量和缺失比例,专门整理一份缺失值报告再决定插补方案。
4.4 工具变量选择注意事项
CLASS数据做内生性处理时,工具变量的选取空间比想象中小。我的建议是优先去其他波次或子女配对问卷中找工具。比如研究代际经济支持对老人健康的影响,可以用子女收入水平作为工具变量,因为子女收入会影响转移支付的额度,但不直接影响父母健康水平。
不过在实际执行中要注意,父母健康对子女收入的间接影响并非完全不存在(比如父母健康差可能导致子女减少工作时间),所以工具变量的外生性讨论一定要做充分。常见的检验方法包括:第一阶段F值是否大于10,过度识别检验是否通过(如果有多个工具变量)。
5. 实用工具补充与结果输出的参考方案
5.1 开源替代与免费软件的备选方案
很多刚接触CLASS数据的研究者会问,如果没有正版SPSS或Stata授权怎么办。我理解这种困境,毕竟正版授权价格不低。除商业软件外,R语言其实能覆盖90%以上的CLASS分析需求。R的tidyverse做数据清洗非常灵活,survey包支持复杂抽样设计,estimatr包处理稳健标准误也很方便。如果你愿意投入时间学习基本语法,R完全可以作为长期主力工具。
5.2 结果表格与可视化输出
Stata中我比较常用esttab命令输出规范的回归表格。单独跑一个模型后再用est store m1保存,最后统一导出为Word或Excel格式。这样不仅省去了复制粘贴的繁琐,也能保证表格格式统一。
可视化方面,marginsplot画调节效应或交互效应非常顺手。以“年龄与居住安排对抑郁程度的交互影响”为例:
reg depress c.age##i.live_alone income_ln health_index margins, at(age=(60(5)90) live_alone=(0 1)) marginsplot, xdimension(age) /// title("居住安排与年龄的交互效应") /// ytitle("预测抑郁得分")SPSS中也有类似的可视化菜单,但灵活性差很多。我建议回归图一律交给Stata,描述性的简单条形图用SPSS就可以。
5.3 多波次面板数据整理的个人习惯
最后分享一个整理多波次面板数据的小技巧:CLASS不是每一波都能追踪到所有老人,样本死率和失访率都客观存在。在做面板分析前,一定要确认自己的样本平衡与否。如果想用固定效应模型,至少需要每个个体有两个波次以上的观察记录。这时可以在Stata中检查:
xtset id wave xtdescribe如果结果显示大量个体只有一个波次,那么固定效应模型的有效样本会缩水很多,此时随机效应模型或混合效应模型可能是更现实的选择。另一个思路是分别做“截面分析”和“受限面板分析”,用截面大样本确认相关关系,用面板子样本做因果推断补充。
6. 从数据到论文:一个完整分析框架示例
写到最后,我把自己用CLASS数据做一篇实证论文的框架放在这里,供你参考:
- 研究问题:居住安排如何影响老年人自评健康?代际经济支持是否发挥中介作用?
- 数据来源:CLASS 2018年截面数据,筛选六十岁及以上、有完整健康与经济信息的样本。
- 变量设置:因变量为自评健康有序变量;核心自变量为居住安排(独居/仅配偶/与子女同住/其他);中介变量为子女经济支持金额对数;控制变量为年龄、性别、教育、收入、慢性病数、城乡。
- 实证策略:先做有序Logit基准回归,再以子女经济支持为中介变量做KHB分解或Bootstrap中介效应检验,并报告稳健性结果(替换健康指标、加入省份固定效应、剔除异常样本)。
- 预期结果:与子女同住老人的自评健康未必更好,居住安排通过代际经济支持的中介效应对健康产生影响,且城乡之间存在明显差异。
如果你手上正好有一批CLASS年度数据还没跑完,这篇文章里的变量处理思路和分析流程应该能帮你快速搭建起自己的实证框架。数据量大不一定是负担,理清变量间的关系链条之后,每一个波次都能产出扎扎实实的结论。
本文还有配套的精品资源,点击获取