Stata 17 数据处理实战:CFPS 2020 数据清洗与基尼系数测算的 5 个关键步骤

发布时间:2026/7/11 2:05:56
Stata 17 数据处理实战:CFPS 2020 数据清洗与基尼系数测算的 5 个关键步骤 Stata 17 数据处理实战CFPS 2020 数据清洗与基尼系数测算的 5 个关键步骤微观调查数据是社会科学研究的重要基础而中国家庭追踪调查CFPS作为国内权威的追踪调查项目其数据质量高、覆盖范围广被广泛应用于经济学、社会学等领域的研究。然而原始数据往往存在缺失值、异常值、重复记录等问题直接使用可能导致分析结果偏差。本文将基于 Stata 17详细介绍 CFPS 2020 数据处理的完整流程重点讲解数据清洗、缩尾处理、分省基尼系数计算等核心操作帮助研究者构建规范、可复用的分析模板。1. 数据准备与初步清洗在开始任何分析之前数据准备工作至关重要。CFPS 2020 数据通常以.dta格式提供我们需要先加载数据并检查其基本情况。use cfps2020famecon_202306.dta, clear加载数据后首先应该使用describe和codebook命令了解数据结构和变量分布describe codebook fincome1 fincome1_per familysize20数据清洗的第一步是处理缺失值和异常值。CFPS 数据中缺失值通常以特定编码表示如-8表示不适用我们需要识别并妥善处理这些值mvdecode _all, mv(-8 . \ -9 .)对于家庭收入等连续变量极端值可能会严重影响分析结果。我们可以使用summarize命令查看变量的分布情况summarize fincome1, detail常见数据问题及处理方法问题类型检测方法处理方案缺失值codebook查看缺失比例删除或插补异常值summarize查看极值缩尾或截尾处理重复记录duplicates report删除重复项不一致编码tab查看分类分布统一编码标准提示在处理数据前建议先保存原始数据的备份避免不可逆的操作导致数据丢失。2. 数据缩尾处理应对极端值影响收入等经济变量常常存在极端值这些极端值可能反映数据录入错误或极少数的特殊情况但会严重影响统计分析结果。缩尾处理Winsorization是解决这一问题的常用方法。Stata 17 提供了winsor2命令需先安装进行缩尾处理该命令比传统的winsor更加灵活ssc install winsor2 winsor2 fincome1, cuts(1 99) replace winsor2 fincome1_per, cuts(1 99) replace上述命令将fincome1和fincome1_per变量两端各1%的极端值替换为第1和第99百分位数的值。replace选项表示直接替换原变量。缩尾处理前后对比summarize fincome1 fincome1_w除了全局缩尾有时还需要按组进行缩尾处理。例如不同省份的收入分布可能有差异我们可以按省份分组缩尾bysort provcd20: winsor2 fincome1_per, cuts(1 99) replace suffix(_prov)注意缩尾处理虽然能减少极端值影响但也会损失部分信息。研究者应根据研究问题和数据特点谨慎选择缩尾比例。3. 分省基尼系数计算与解读基尼系数是衡量收入不平等的重要指标其值介于0和1之间0表示完全平等1表示完全不平等。在Stata中计算基尼系数有多种方法这里介绍基于收入排序的常用方法。首先我们需要按省份对家庭进行分组并按人均收入排序bysort provcd20 (fincome1_per): egen tp sum(familysize20) bysort provcd20 (fincome1_per): egen tinc sum(fincome1)然后计算每个家庭的收入占比和人口占比by provcd20: gen p familysize20/tp by provcd20: gen w fincome1/tinc接着计算收入的累积分布by provcd20: gen q sum(w)最后根据基尼系数公式计算by provcd20: egen onesubtractgini sum(p*(2*q - w)) gen gini 1 - onesubtractgini基尼系数计算结果示例省份代码省份名称基尼系数样本量11北京0.321,20031上海0.351,50044广东0.382,000提示基尼系数解释需谨慎通常0.4被视为收入差距较大的警戒线但这一标准在不同发展阶段的社会可能有不同含义。4. 数据合并构建完整分析样本CFPS数据通常分散在多个文件中需要合并才能获得完整信息。数据合并主要有两种方式横向合并merge和纵向合并append。4.1 横向合并添加户主个人信息横向合并用于将不同但相关的数据集合并到同一个观察单位上。例如将户主的个人信息合并到家庭数据中// 确保每个家庭只有一个户主 duplicates tag resp1pid, generate(dup) drop if dup 1 // 准备合并键 gen double pid resp1pid // 执行合并 merge 1:1 pid using 2020待合并person数据库.dta keep if _merge 3 drop _merge4.2 纵向合并构建面板数据纵向合并用于将不同时间点的数据堆叠起来构建面板数据集。例如合并2016、2018和2020年的数据append using 2018待合并总库.dta append using 2016待合并总库.dta // 设置面板数据结构 xtset fid16 cyear, delta(2)合并数据时的常见问题及解决方案键变量不匹配确保合并键的数据类型和格式一致重复观察值合并前使用duplicates命令检查并处理变量名冲突合并时使用rename解决命名冲突缺失值处理明确合并后对未匹配记录的保留策略5. 高级数据处理抚养比计算与回归分析在完成基础数据清洗和合并后我们通常需要构建一些衍生变量进行分析。例如计算家庭的少儿抚养比和老年抚养比// 计算家庭成员中的少儿和老人数量 forvalues i 1/15 { gen childi 1 if agei 0 agei 16 gen oldpersoni 1 if agei 65 agei 100 } // 汇总计算抚养比 egen 少儿抚养总数 rowtotal(child1-child15) egen 老人抚养总数 rowtotal(oldperson1-oldperson15) gen 少儿抚养比 少儿抚养总数 / familysize20 gen 老年抚养比 老人抚养总数 / familysize20有了这些变量我们可以进行各种经济计量分析。例如研究基尼系数对家庭消费的影响gen lnfincome ln(fincome1) gen lntotal_asset ln(total_asset) gen lnexpense ln(expense) reg lnexpense gini lnfincome lntotal_asset 少儿抚养比 老年抚养比 age0 i.gender i.marrige, vce(cluster provcd20)对于面板数据可以使用固定效应模型控制不随时间变化的个体异质性xtreg lnexpense gini lnfincome lntotal_asset 少儿抚养比 老年抚养比, fe robust模型选择建议使用Hausman检验在固定效应和随机效应模型间选择对于截面数据考虑加入地区虚拟变量控制地区差异对连续变量取对数可以缓解异方差问题使用聚类标准误处理组内相关性