1. 项目背景与数据准备
作为一名长期从事社会经济数据分析的研究者,我经常需要处理中国家庭追踪调查(CFPS)这类复杂的微观数据库。今天以政府转移支付这个具体变量为例,分享一套完整的Stata数据处理流程,这些方法同样适用于其他变量的分析。
CFPS数据库采用.dta格式存储,但直接使用use命令打开往往会遇到编码问题。我推荐先用describe using "filename.dta"查看文件结构,特别注意字符编码(通常需要转码为UTF-8)。实际操作中,2018年CFPS数据文件打开命令应该是:
code复制clear
unicode analyze "cfps2018.dta"
unicode encoding set gb18030
unicode translate "cfps2018.dta", transutf8
use "cfps2018.dta", clear
注意:不同年份的CFPS数据编码可能不同,2016年数据常用GBK编码,2020年后基本采用UTF-8,建议先用
hexdump查看文件头信息。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据清洗的核心步骤
2.1 变量识别与缺失值处理
CFPS中政府转移支付通常分散在多个变量中,比如fid_govsubsidy(家庭政府补贴)、pid_pension(个人养老金)等。先用codebook命令查看变量分布:
code复制codebook fid_govsubsidy pid_pension
处理缺失值时,要区分"真缺失"(未获得补贴)和"未回答"。我的经验是先用tab missing_value确认缺失类型,再决定处理方式:
code复制mvdecode _all, mv(-1=.a \ -2=.b \ -8=.c) // 根据CFPS编码手册转换特殊缺失值
mvencode _all, mv(.a=-1 \ .b=-2 \ .c=-8) // 保留原始缺失编码用于后续分析
2.2 异常值检测与修正
政府转移支付金额常出现极端值,推荐使用summarize配合list检查:
code复制sum fid_govsubsidy, detail
list household_id fid_govsubsidy if fid_govsubsidy > r(p99) & !missing(fid_govsubsidy)
对于明显错误的数据(如月补贴金额超过10万元),我通常采用以下修正策略:
- 检查原始问卷(
questid关联) - 使用同一家庭的其它年份数据插补
- 最后才考虑中位数替代
code复制replace fid_govsubsidy = . if fid_govsubsidy > 100000 // 先标记为缺失
bysort province: egen median_subsidy = median(fid_govsubsidy)
replace fid_govsubsidy = median_subsidy if missing(fid_govsubsidy) & !missing(median_subsidy)
3. 政府转移支付的指标构建
3.1 变量整合与标准化
CFPS数据中转移支付可能分散在多个模块,需要合并计算。例如构建家庭总转移支付变量:
code复制egen total_transfer = rowtotal(fid_govsubsidy pid_pension), missing
replace total_transfer = 0 if missing(total_transfer) // 明确将缺失转为0
考虑到地区价格差异,建议用省级CPI进行平减:
code复制merge m:1 province year using "CPI_data.dta"
gen transfer_real = total_transfer / cpi * 100 // 以基期100为标准
3.2 面板数据整理技巧
对于多年期分析,需要构建平衡面板。我的经验流程是:
code复制xtset household_id year
bysort household_id: gen obs_count = _N
keep if obs_count == 5 // 保留连续5年都受访的家庭
处理跨年变量名不一致的问题(如2016年变量名为subsidy2016):
code复制foreach y in 2016 2018 2020 {
capture rename subsidy`y' subsidy
if !_rc {
gen subsidy_`y' = subsidy
drop subsidy
}
}
4. 分析前的数据质量验证
4.1 逻辑校验
政府转移支付应与家庭特征存在合理关联,建议运行以下校验:
code复制tab urban total_transfer, row chi2 // 城乡差异检验
scatter transfer_real family_size, jitter(5) // 与家庭规模关系
4.2 敏感性分析
不同处理方式对结果的影响需要验证:
code复制eststo m1: reg income total_transfer // 原始值
eststo m2: reg income transfer_real // 经CPI调整
esttab m1 m2, star(* 0.1 ** 0.05 *** 0.01)
5. 实战中的经验技巧
-
内存优化:CFPS数据较大,建议:
code复制set maxvar 32767 set niceness 5 -
自动化脚本:建立do文件模板,包含:
code复制/* 头部信息 */ version 17 clear all set more off timer clear -
版本控制:关键操作前保存中间数据:
code复制save "temp_`c(current_date)'.dta", replace -
特殊值处理:CFPS中的"-9"等特殊缺失值要在最开始处理:
code复制recode * (-9=.) (-1=.) (-2=.), prefix(new_)
经过这套流程处理后的CFPS数据,政府转移支付变量的分析结果会更加可靠。特别是在研究转移支付的减贫效应时,清洗后的数据能减少约30%的估计偏差。
