1. 项目背景与核心目标
在中国家庭追踪调查(CFPS)数据的海洋中,政府转移支付数据就像一座尚未充分开采的金矿。作为研究收入分配、社会保障政策效果的重要指标,这部分数据往往分散在多个问卷模块中,需要研究者像侦探一样将它们串联起来。我在分析2018年CFPS数据时发现,仅家庭问卷中涉及政府转移支付的变量就分布在7个不同章节,更不用说与个人问卷的匹配问题了。
这个项目的核心价值在于建立一套标准化的CFPS数据处理流程,重点解决三个痛点:一是原始数据分散在不同问卷和年份中的变量整合;二是CFPS特有的编码规则(如"-8"表示"不适用")带来的清洗难题;三是跨年数据合并时的样本匹配问题。通过Stata的自动化处理,我们可以将原本需要两周的手工操作压缩到2小时内完成。
2. 数据准备与环境搭建
2.1 CFPS数据获取与结构解析
最新版CFPS数据(以2020年为例)通常包含以下核心文件:
famconf_2020.dta:家庭问卷基础信息famecon_2020.dta:家庭经济状况(含转移支付)person_2020.dta:个人基本信息income_2020.dta:个人收入明细
重要提示:CFPS数据使用需要先签署数据使用协议,原始数据需从北京大学开放研究数据平台(CNRDS)或CFPS官网申请获取,严禁用于商业用途。
2.2 Stata环境配置建议
推荐使用Stata 16+版本处理CFPS数据,关键配置如下:
stata复制set more off // 关闭分页显示
set maxvar 10000 // CFPS数据变量数可能超过默认5000限制
set excelxlsx largefile on // 处理大型Excel文件
安装必要的外部命令:
stata复制ssc install fre // 频数统计增强版
ssc install mdesc // 缺失值分析
ssc install carryforward // 缺失值填补
3. 数据导入与初步清洗
3.1 多文件合并策略
CFPS数据的复杂之处在于需要跨问卷合并。以识别政府转移支付为例,我们需要建立家庭ID(fid)和个人ID(pid)的关联:
stata复制// 家庭问卷合并
use famconf_2020.dta, clear
merge 1:1 fid using famecon_2020.dta, keep(match) nogen
// 关联个人问卷
preserve
use person_2020.dta, clear
keep pid fid provcd countyid // 保留关键识别变量
tempfile person_link
save `person_link'
restore
merge 1:m fid using `person_link', keep(match) nogen
3.2 CFPS特殊编码处理
CFPS采用了一套特殊的缺失值编码系统,必须优先处理:
stata复制foreach var of varlist _all {
replace `var' = . if inlist(`var', -1, -2, -8, -9) // -1=不知道 -2=拒绝回答 -8=不适用 -9=缺失
label values `var' // 清除特殊编码的标签
}
针对转移支付相关变量(如低保收入db01),需要额外注意:
stata复制replace db01 = 0 if db01 == . & db00 == 2 // 如果db00=2表示"未获得低保",则低保金额设为0
4. 政府转移支付变量构建
4.1 转移支付类型识别
CFPS中政府转移支付主要包括:
- 社会救助:低保(
db01)、特困供养(te01) - 社会福利:高龄津贴(
ga01)、残疾人补贴(di01) - 灾害救济(
dr01) - 其他补贴:农业补贴(
ag01)、教育补贴(ed01)
构建总转移支付变量:
stata复制egen transfer_payment = rowtotal(db01 te01 ga01 di01 dr01 ag01 ed01), missing
replace transfer_payment = 0 if missing(transfer_payment) & ///
(db00==2 | te00==2 | ga00==2 | di00==2 | dr00==2 | ag00==2 | ed00==2)
4.2 跨年数据衔接处理
当分析多年数据时(如2016-2020),需要处理样本流失和问卷调整:
stata复制// 使用2016年家庭ID匹配2020年样本
use cfps2016famconf.dta, clear
keep fid16 provcd16 countyid16 // 保留关键ID和地理代码
rename (fid16 provcd16 countyid16) (fid provcd countyid)
tempfile 2016sample
save `2016sample'
use cfps2020famconf.dta, clear
merge 1:1 fid provcd countyid using `2016sample', keep(match) nogen
5. 数据分析与可视化
5.1 描述性统计示例
计算各省转移支付均值:
stata复制collapse (mean) transfer_payment [aw=weight], by(provcd)
decode provcd, gen(province) // 将省份代码转为文字
gsort -transfer_payment
list province transfer_payment in 1/10
5.2 转移支付影响因素分析
构建简单的Tobit模型(因转移支付有大量0值):
stata复制tobit transfer_payment i.education i.hukou famsize dependency_ratio, ll(0) vce(cluster countyid)
est store m1
outreg2 [m1] using transfer_reg.xls, replace ctitle(Model1) label
6. 实战经验与避坑指南
-
样本权重处理:CFPS的
weight变量必须用于代表性分析,但在匹配样本时需暂时忽略权重stata复制svyset [pw=weight], strata(provcd) psu(countyid) svy: mean transfer_payment -
地理代码变化:2014年后县级行政区划代码调整,跨年匹配需使用跨年匹配文件
crossyear_id.dta -
内存管理技巧:处理大型数据时使用
preserve/restore分段处理:stata复制preserve keep if provcd == 11 // 北京样本 do analysis_for_beijing.do restore -
变量标签保护:在删除变量前先保存标签:
stata复制local varlabel : var label `var' drop `var' // 需要时恢复标签 label var newvar "`varlabel'"
7. 成果输出与复现保障
7.1 自动化脚本设计
建议将整个流程封装为do文件,典型结构:
stata复制/* CFPS转移支付分析脚本 */
version 16
clear all
set more off
// 第一部分:数据准备
do 01_data_preparation.do
// 第二部分:变量构建
do 02_variable_construction.do
// 第三部分:分析模型
do 03_analysis_model.do
// 输出结果
log using analysis.log, replace
do 04_output_results.do
log close
7.2 版本控制建议
使用Git管理研究项目:
code复制CFPS_Transfer/
├── data/ // 原始数据
├── do_files/ // Stata脚本
├── output/ // 结果输出
├── docs/ // 文档记录
└── README.md // 项目说明
在do文件开头记录关键信息:
stata复制/*
项目名称:CFPS政府转移支付分析
作者:Your Name
最后更新:2023-08-20
运行环境:Stata 16 MP
依赖命令:fre, mdesc, carryforward
*/
处理CFPS这类复杂调查数据时,我习惯在每天工作结束时运行以下检查命令,确保数据完整性:
stata复制assert !missing(fid) // 确保家庭ID无缺失
isid fid // 检查ID唯一性
mdesc // 查看缺失值情况
这个流程不仅适用于政府转移支付分析,经过适当调整也可用于教育支出、医疗负担等CFPS其他经济变量的研究。关键在于建立标准化的数据清洗框架,这对后续开展跨年追踪分析尤为重要。