数据筛选理还乱,datacheck能诊断
本文作者:俞诗琪
文字编辑:朱巧利
导读
在前期推文中,我们介绍了比较两个相似数据集的方法(详见《Stata版大家来找茬—cfout就够了》),那么如何检查单个数据集内部信息呢?小编今天就带大家学习一个好用的新命令——datacheck命令。
一、温故知新
在学习datacheck命令前呢,我们一起来回顾一个系统自带命令——assert命令。这个命令想必对于大家来说不陌生,它可以帮助我们检验数据集中数据是否符合特定条件,下面用一个简单例子来说明:
clear all
sysuse bplong
describe
这里我们采用数据集bplong,它跟踪记录了120个病人两期血压值的数据。如上图所示,变量patient、sex、agegrp、when和bp分别记录了病人编号、性别、年龄区间、测量时期以及血压值。现在我们利用assert命令,检查数据集中是否有性别误填(即sex变量值非0或1)的情况:
assert sex == 0 | sex == 1
输出结果为空,说明数据集中sex变量值均符合“sex == 0 | sex == 1”条件,不存在sex变量值非0且非1的项。现在我们对数据集第2行稍加改动,再次检验:
replace sex = 3 in 2
assert sex == 0 | sex == 1
结果显示r(9)的报错,240项观察值中有1项不符合要求。此时若要列出这一不合要求项,还要用到list命令。但当数据集较为复杂时,我们可直接使用datacheck命令一步搞定:
datacheck sex == 0 | sex == 1
看到这你一定会问,datacheck到底是个怎样的命令呢?别着急,接下来我们将详细了解datacheck命令的用法和优势!
二、datacheck命令的语法及常用选项
首先,datacheck是个外部命令,需要通过“ssc install datacheck”进行安装。使用该命令,可以检验不符合项的存在与否,并输出、标记不符合项的内容(或不符合项及其前/后一项内容),其基本语法如下:
datacheck true_or_false_condition [if condition] [in range] [ , by(byvarlist) message(string) varshow(varlist) previous next flag nolist list_options ]
三、datacheck命令的用法示例
1、检验sex变量值是否误填
紧接上述筛选sex误填项的操作:
datacheck sex == 0 | sex == 1
筛选出一行不符合条件“sex == 0 | sex == 1”的观察值,其sex变量取值为“3”。此时未加选项“varshow”,默认输出所有变量。当然也可在选项varshow中指定patient和sex变量,使结果更为精炼:
datacheck sex == 0 | sex == 1, varshow(patient sex)
如果需要多次使用datacheck命令,一次性输出多个筛查结果,或其他复杂的程序运行下,使用message选项设置各筛查结果的名称,能使结果更具可读性:
datacheck sex == 0 | sex == 1, message(Wrong sex)
如上所示,这里我们将输出内容命名为“Wrong sex”。有时,我们不仅需要查看不符合项的内容,还要观察其前一项数据,那么选项previous就可轻松解决:
datacheck sex == 0 | sex == 1, message(Wrong sex) previous
相应地,使用选项next可观察不符合项及其后一项的数据:
datacheck sex == 0 | sex == 1, message(Wrong sex) next
2、筛选重度高血压患者
使用datacheck命令筛选重度高血压(变量bp值大于180)患者:
datacheck bp <= 180, message(Severe high blood pressure)
按性别分组后得到结果:
sort sex
datacheck bp <= 180, by(sex) message(Severe high blood pressure)
使用datacheck命令的by选项前,必须先用sort命令按分类变量(这里是sex变量)排序,否则会报错。若想在数据集上直接标出重度高血压患者,可使用flag选项,生成新变量_contra:
datacheck bp <= 180, message(Severe high blood pressure) fla
结果显示,符合“bp <= 180”条件的项,其_contra变量值为“0”,否则其_contra变量值为“1”,一目了然,进行后续操作时就十分方便啦!
简单地说,使用datacheck命令的目的,即筛选、输出、标记不符合项的内容(或不符合项及其前/后一项内容),其结果形式可控,且可读性强,能满足快速检验数据集数据的需求,赶紧拿小本本记下来吧!
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。