如果你的数据中存在缺失值,想必这一定令你寝食难安辗转反侧吧。
那么,我们如何去填补这些缺失值呢?解决问题之前呢,应该先了解问题。
缺失值到底是什么值呢?
在有些命令中,如sum,regress,generate等,会自动忽略缺失值;而在有些命令中,如count,keep等,则会将缺失值视为一个无穷大的数值,因此在操作中需要引起你的注意。
随附例子:
- sysuse auto,clear
- sort rep78
- list rep78
- sum rep78 if rep78>4 //obs=11
- count if rep78>4 //obs=16
- keep if rep78>4
- list rep78
拿到一份数据,想看一下变量缺失情况,怎么办?
【命令】nmissing
- ssc install nmissing //先下载外部命令nmissing
- sysuse auto,clear
- nmissing //显示所有变量的缺失数目
- nmissing rep78 //显示变量rep78的缺失数目
【命令】mdesc 介个更给力!!
- ssc install mdesc
- sysuse auto,clear
- mdesc
缺失值会影响我的回归分析,怎么删掉它呢?
【Case1 如何删除一个变量的所有缺失值】
- sysuse auto,clear
- sum
- drop if rep78==.
- sum
【Case2 如何删除多个变量的缺失值 对比各种方法对比思考】
- sysuse auto,clear
- sum
- gen newvar=5
- replace newvar=. if mpg<20
- sum
- drop if rep78==. | newvar==.
- sum
- sysuse auto,clear
- sum
- gen newvar=5
- replace newvar=. if mpg<20
- sum
- drop if rep78==. & newvar==.
- sum
- sysuse auto,clear
- sum
- gen newvar=5
- replace newvar=. if mpg<20
- egen mis = rowmiss(_all)
- drop if mis //或者drop if mis>0
【Case3 reg回归分析中】
- sysuse nlsw88.dta,clear
- sum
- reg wage industry occup tenure hours
- gen byte nomis = e(sample) //表示样本的虚拟变量
- sum wage industry occup tenure hours if (nomis==1)
- keep if nomis
缺失值会影响我的回归分析,怎么补充呢?
【Case1 缺失值较少,用前后项补充】
- sysuse auto,clear
- list rep78
- replace rep78=rep78[_n-1] if rep78==. //用前一项补充
- list rep78
-
- sysuse auto,clear
- list rep78
- replace rep78=rep78[_n+1] if rep78==. //用后一项补充
- list rep78
【Case2 某一年的数据缺失,用前后年平均值补充】
比如2001年的gdp数据缺失,那可以用2000和2002年的均值代替。
replace gdp=(l.gdp+f.gdp)/2 if year==2001 //l是lag的缩写;f是forward的缩写
【Case3 MI和MA】
多重补漏 multiple imputation和移动平均moving average,展开就复杂了,大家可以先下载资料学习着,这个日后补充。


雷达卡







京公网安备 11010802022788号







