查看原文
其他

mvencode和mvdecode——打开缺失值与特定数值转换大门的钥匙

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:孙晓玲

文字编辑:李婷婷

技术总编:余术玲

爬虫俱乐部云端课程来袭!

爬虫俱乐部将于2020年8月25日至28日在线上举行Stata数据分析法律与制度专题训练营,主要是为了让学员掌握Stata软件进阶操作,涉及内容包括基本字符串函数及其应用、正则表达式、法律与制度数据网络爬虫技巧、判案文书的文本分析等技术。详情请参考8月Stata数据分析法律与制度专场来啦!

    另外,爬虫俱乐部于2020年7月在线上举办的Stata与Python编程技术训练营已圆满结束。应广大学员需求,我们的课程现已在腾讯课堂双双上线,且继续提供答疑服务。现在关注公众号并在朋友圈转发推文《来腾讯课堂学Stata和Python啦!》,即可获得600元课程优惠券,集赞50个再领200元课程优惠劵!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元

导读

处理缺失值是数据处理与分析过程的家常便饭,在常用的Excel文件、csv文件等文件中,缺失值一般是用“ ”(空)来表示,Stata默认的dta格式的文件中,缺失值通常以.”(点)的形式存在,而在有些数据缺失值不是用点或者空来表示的,而是-9996这样的一些较大的数值来表示,这种特殊数值往往远偏离变量的取值范围,因为在Stata中“.”默认为无穷大。那如何实现“.”(缺失值)与特定数值之间的转换?接下来,小编将为大家介绍实现这个过程的两个命令——mvencodemvdecode

一、命令语法

mvencode和mvdecode的基本语法如下:

1.从缺失值到数值型
mvencode varlist [if] [in], mv(#|mvc=# [\ mvc=#...] [\ else=#]) [override]

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,clearmisstable summarizelist 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选项的使用

override选项为mvencode的特殊选项,使用时需要谨慎操作,现做如下演示。先将原本缺失的rep78变量的第3个观测值替换为999,再按照缺失值转换的方法将缺失值替换为999。

sysuse auto,clearlist rep78 if rep78 == .replace rep78 = 999 in 3mvencode rep78, mv(999)

此时,系统发生报错,变量rep78已有一个观测值取值为999,这时如果需要强制转换,需要加上override选项。

mvencode rep78, mv(999) override

加上override选项后转换成功。这时,如果再将数据转换为缺失值时,就会出现问题。

mvdecode rep78, mv(999)

可以发现mvdecode误将原本不是缺失值的999也替换成缺失值了。所以,override选项需要慎用,以免丢失数据,这也是mv选项通常将数据型数值设置成远偏离变量取值范围的原因。





对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
优雅的map()
Python实现Excel中vlookup函数功能
Stata实现Excel中vlookup函数功能
gen与egen,傻傻分不清楚?

用WordStat看中国日报新闻(二)

一招轻松合并文件——openall命令介绍

爬虫俱乐部平安经
一个函数实现PDF文档合并与拆分
补全股票代码位数的一百种姿势

明星闪闪亮:各校高被引论文

高校经管类核心期刊发文排行榜|2010-2019

PDF图片提取
PDF文档转换成图片

split和nsplit助你轻松拆分

集成学习介绍之三——Stacking算法

PyMuPDF提取文本信息

Mylabels命令介绍   

关于我们


微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存