distinct命令用法一览
本文作者:宁刘莹
文字编辑:李钊颖
技术总编:李朋冲
在使用Stata进行实践操作时,经常会遇到这样的情况:在同一变量下面有很多重复的观测值,若想知道重复观测值的数量,我们可以使用duplicates report,但若想知道变量下有多少不同的取值呢?本文将介绍一个方便快捷的命令:distinct命令。该命令除了报告出同一个变量下不同值的数量之外,还可以报告两个或多个变量的联合观测值对中不同值的数量等。
distinct命令的语法结构如下:
distinct [varlist] [if] [in] [, missing abbrev(#) joint minimum(#)maximum(#) ]
distinct命令用来显示varlist变量下的不同观测值的数量。默认情况下,分别考虑各个变量,以便每个变量中不同观测值的数量都能被显示出来。
当考虑联合变量时,使用distinct可以显示几个变量的联合取值有多少不同的值对,在下文中将以具体的例子来详细解释这一用法。varlist下可以同时包含数值型和字符型变量。
默认情况下,distinct命令不考虑缺失值。
distinct命令的选项介绍:
missing:在确定不同的观测值时,考虑缺失值。
abbrev(#):变量名最多可缩写为#个字符,在添加“joint”选项时,abbrev(#)选项不适用。
joint:确定几个变量下不同联合取值(值对)的数量。
minimum(#) //只显示大于或等于给定最小个数的不同值的数量。
maximum(#) //只显示小于或等于给定最大个数的不同值的数量。
先举一个阐释性的例子:
假如某个变量下面有1,2,3,3,3,5,7,7,9几个观测值,它们当中有6个不同的值,则distinctness为6,但是通过duplicates report,我们只能找到2个重复观测值:3和7,这就是二者的区别。
考虑两个变量(数值型和字符型)组成的值对:1和“a”、2和“b”、3和“c”、3和“c”、3和“d”、4和“c”、4和“c”、4和“d”、4和“d”,这些观测值中共有6个不同的联合取值。而对于每个变量来说,数值型变量有4个不同值,字符型变量也有4个不同的值。
我们在上面介绍了distinct命令的基本工作原理,下面举例说明这个命令及其各个选项的用法:
sysuse auto, clear
distinct //默认显示每一个变量有多少不同的观测值,不包含缺失值
在上面输出的结果中,total表示该变量共有多少观测值(rep78不考虑缺失值),distinct表示该变量下有多少不同的观测值。例如,在这个数据集中,foreign这个变量共有74个观测值,有两个不同的取值:0和1。
如果不需要观察所有变量,则可以直接在后面跟上需要观察的变量名,如下:
distinct make-headroom //显示从变量make到变量headroom这5个变量各自不同观测值的数量
distinct, max(20) //如果该变量下,不同观测值个数不超过20,就报告出来
在输出的表格中,不同值数量超过20的变量,比如make和mpg,就没有被报告出来了。
为了使结果窗口的报告内容更便于阅读,可以将变量名进行缩写:
distinct make-headroom, missing abbrev(6) //变量名最多缩写为6个字符
从结果中可以看到,headroom变量缩写为了head~m。
使用joint选项,可以观察多个变量有多少不同的联合取值。
distinct foreign rep78, joint //不考虑缺失值
如结果所示,由foreign和rep78两个变量共同确定的观测值对共有69个,而其中不同的值对有8个。
之所以总数只有69而不是74,是由于剔除了缺失值对(rep78有5个缺失值)。如果考虑缺失值,可以进一步使用missing选项,如下:
distinct foreign rep78, joint missing //考虑缺失值
以上就是distinct用法的简单介绍,在实际操作中,我们需要对变量进行“全方位、无死角、海陆空式联合搜查”。那首先要做的,就是看看不同取值、重复值的情况了,我们当然可以使用duplicates命令,dinstinct和duplicates有相似,也有不同(参见上文)。关于duplicates命令的用法请参考往期推文《duplicates drop之前,我们要做什么?》,至于具体使用哪个命令,就任君选择啦~
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。