marktouse标记使用变量
本文作者:王碧琪
文字编辑:朱巧利
技术总编:张计宝
Stata暑期线上课程火热招生中~
爬虫俱乐部将于2020年7月11日至14日在线上举行为期四天的Stata编程技术定制培训。课程通过案例教学模式,旨在帮助大家在短期内掌握Stata的基本命令、编程、数据处理以及结果输出等技术,并针对最新版Stata中的实用新功能做出详细介绍,包括框架功能(frame:读入多个数据集)等等。同时,此次云端课程提供录播,提供线上答疑。详细培训大纲及报名方式请查看《Stata云端课程来啦》,或点击文末阅读原文直接提交报名信息呦~
有时,我们需要对命令中使用的观测值进行标记。例如,程序要对不包含缺失值的观测值计算统计量(例如线性回归);或程序设定了条件语句、范围语句等,需要确认其所使用的观测值。这时候一个标记变量就派上用场了。Stata有专门的命令marksample来生成标记变量,对使用的观测值进行标记。小编去看了介绍文档,发现语法复杂,使用起来有些吃力。于是,上网冲浪的小编又捡着宝了,另一个命令大显身手,它就是marktouse。
一、简介
marktouse是外部命令,需要手动安装。
ssc install marktouse
它的基础语法是:
marktouse markvar [varlist] [if] [in] [weight] [, label(label) zeroweight ]
其中,markvar是新生成的标记变量,varlist是一组用于判断的已有变量,if和in加上判断条件语句,weight用于加权,另外,可以用label选项添加标签,用zeroweight声明不排除权重为零的观测值。
它的主要用途是生成一个0/1标记变量用来标识是否使用了该观测值。在没有任何指定变量包含缺失,满足if和in限定符,且具有严格的正、无缺失权重的观察值中,将标记变量设置为1,在所有其他观察值中将其设置为0。
二、案例实操
使用auto数据作为处理对象,生成标记变量。
clear all
sysuse auto,clear
keep make price weight rep78
marktouse touse price weight rep78
生成的touse变量在price、weight、rep78中任意一个为缺失值时取值为0,其余取值为1(因为这里没有设置权重,所以不用考虑无缺失权重问题)。
return list
返回值说明markvar名称为touse,共有69个标记为1的变量值。
count if price==. |weight==. |rep78==.
dis _N-r(N)
使用count来验证,发现price、weight、rep78中任意一个为缺失值的有5个,排除掉之后余下69个观测值,与上面采用marktouse得到的取值为1的观测值数目相等。
接下来,就可以通过标记变量,对即将使用的变量值进行回归操作了。生成标记变量的目的就在于为下面的操作做好铺垫。
regress price weight if touse //线性回归
estimates store model1
xi: regress price weight i.rep78 if touse //虚拟变量回归
estimates store model2
estimates table model1 model2, stats(N)
结果报告了回归的系数,另外可以注意到此时的N是69,与上述marktouse取值为1的数值相同。说明marktouse成功发挥了作用。在需要使用标识变量时,只需在语句中加入iftouse即可,方便快捷,简单明了。
另外,还可以加入label选项。
marktouse touse1 price weight rep78,label("标记price-weight-rep78的使用值") //给touse加标签
在变量属性窗口中可以看到已经成功加上标签,这对于需要使用多个标记变量时很有必要。
三、结语
相较于Stata官方的mark系列命令,marktouse是用来简化marksample的。它不需要在program内使用;生成的是标识变量,而非宏;可以同时标记多个变量,即markvar可以包含多个变量;语法更简单。如果要确保所有命令使用相同的观察值,mark系列未免有点繁琐,那么不妨试试今天介绍的marktouse~~~
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。