mvencode和mvdecode——打开缺失值与特定数值转换大门的钥匙
本文作者:孙晓玲
文字编辑:李婷婷
技术总编:余术玲
爬虫俱乐部云端课程来袭!
另外,爬虫俱乐部于2020年7月在线上举办的Stata与Python编程技术训练营已圆满结束。应广大学员需求,我们的课程现已在腾讯课堂双双上线,且继续提供答疑服务。现在关注公众号并在朋友圈转发推文《来腾讯课堂学Stata和Python啦!》,即可获得600元课程优惠券,集赞50个再领200元课程优惠劵!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元!
导读
处理缺失值是数据处理与分析过程的家常便饭,在常用的Excel文件、csv文件等文件中,缺失值一般是用“ ”(空)来表示,在Stata默认的dta格式的文件中,缺失值通常以“.”(点)的形式存在,而在有些数据中缺失值不是用点或者空来表示的,而是如-9996这样的一些较大的数值来表示,这种特殊数值往往远偏离变量的取值范围,因为在Stata中“.”默认为无穷大。那如何实现“.”(缺失值)与特定数值之间的转换?接下来,小编将为大家介绍实现这个过程的两个命令——mvencode和mvdecode。
mvencode和mvdecode的基本语法如下:
2.从数值型到缺失值
mvdecode varlist [if] [in], mv(numlist | numlist=mvc [\ numlist=mvc...])
将mvencode和mvdecode分别理解为“missing value encode”——将缺失值编译成可理解的数值型和“missing value decode”——将特殊数值型解译成缺失值。varlist为需要编译或解译的变量集,必要时可以使用“_all”表示对所有变量进行处理;mv选项设置编译成的数值或需要解译的数值;override选项用来强制编译缺失值,当设置的编译数值在变量取值范围内已存在时仍然强制编译就需要用到这个选项,一般不用。
小编将使用Stata自带的auto.dta数据集为大家介绍这两个命令。首先获取数据,查看缺失值的分布状况。
sysuse auto,clear
misstable summarize
list rep78 foreign if rep78 == .
可以发现,数据集中存在5个缺失值,国产车4个、进口车1个,均来自rep78这个变量,这5个缺失值分别来自第3、7、45、51、64这5个观测值,除去缺失值外rep78的最小最大值分为为1和5。了解了缺失值的情况,接下来将缺失值替换为数值型的数字,为区分国产车和进口车的数据,将国产车的缺失值转为999,将进口车的缺失值转换为-999,并查看数据。
mvencode rep78 if foreign == 0, mv(999)
mvencode rep78 if foreign == 1, mv(-999)
count if rep78 == .
list rep78 foreign if rep78 ==999 | rep78==-999
结果窗口显示,4个国产车缺失值已经被编译为999,1个进口车缺失值被替换成-999,rep78无缺失值。学会了将缺失值转换为数值型。接下来,我们用mvdecode将特殊数值转换成缺失值(.)形式,使用命令mvdecode对国产车和进口车特殊值进行处理,再查看缺失值。
mvdecode rep78, mv(999=. \ -999=.)
list rep78 foreign if rep78 >= .
这样,rep78的第3、7、45、51、64个观测值又成为缺失值。
override选项为mvencode的特殊选项,使用时需要谨慎操作,现做如下演示。先将原本缺失的rep78变量的第3个观测值替换为999,再按照缺失值转换的方法将缺失值替换为999。
sysuse auto,clear
list rep78 if rep78 == .
replace rep78 = 999 in 3
mvencode rep78, mv(999)
此时,系统发生报错,变量rep78已有一个观测值取值为999,这时如果需要强制转换,需要加上override选项。
mvencode rep78, mv(999) override
加上override选项后转换成功。这时,如果再将数据转换为缺失值时,就会出现问题。
mvdecode rep78, mv(999)
可以发现mvdecode误将原本不是缺失值的999也替换成缺失值了。所以,override选项需要慎用,以免丢失数据,这也是mv选项通常将数据型数值设置成远偏离变量取值范围的原因。
用WordStat看中国日报新闻(二)
一招轻松合并文件——openall命令介绍
高校经管类核心期刊发文排行榜|2010-2019
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。