
---
**CFPS 数据清洗实战:手把手拆解非平衡面板处理**
刚拿到 CFPS 面板数据的新手大概率会被几千个变量吓懵。别慌,咱们先打开 Stata,把官
网下载的原始数据拖进 do 编辑器。先处理 2010 年的家庭经济问卷:
```stata
use "cfps2010famconf.dta", clear
encode famcode, gen(family_id) //字符型 ID 转数值型
keep family_id f_income f_assets //保留核心经济变量
save temp_2010, replace
```
这里`encode`命令是关键——原始数据里的家庭 ID 通常是文本,转成数值型变量才能做后
续合并。提醒:记得用`keep`精简变量,避免内存爆炸(原始数据动不动上百兆)。
接着处理 2022 年的数据时发现了坑:变量名从`f_income`变成了`fam_income`。这时候别
头铁硬编码,用`rename`批量处理:
```stata
rename fam_income f_income //统一变量命名
rename fam_assets f_assets
```
建议把这类重命名操作单独写成`do`片段存着,下次更新数据直接调用。
**缺失值处理讲究快准狠**
遇到`f_income`里出现-9999 这种非法值时,老司机通常这么干:
```stata
replace f_income = . if f_income <0 //负值转缺失
bysort family_id: egen mean_income = mean(f_income) //计算家庭平均收入
replace f_income = mean_income if missing(f_income) //用均值填充
drop mean_income
```
注意别无脑用均值填充!这里只是演示,真实场景可能要分城乡/分收入层级处理。
**合并十年数据像拼乐高**
用`append`纵向合并各年份数据后,突然发现家庭 ID 有重复?上硬核校验:
```stata
append using temp_2010 temp_2012 ... temp_2022
bysort family_id year: gen dup = _N>1
list family_id year if dup //揪出重复值
```