【问题标题】:Count unique values in Stata计算Stata中的唯一值
【发布时间】:2016-05-07 17:22:12
【问题描述】:

codebook 在 Stata 中是一个很棒的命令。它描述了数据内容,但也简单地标识了唯一值

sysuse auto, clear
codebook mpg, compact

mpg 的唯一值个数是 21。查看命令的帮助,似乎无法存储这个值。我错了吗?

我知道在 Stata 中计算 number of unique values 的其他方法,但是将此功能添加到 codebook 命令会非常方便。

【问题讨论】:

标签: count unique stata


【解决方案1】:

您可以轻松地为 codebook 编写一个包装器,该包装器使用来自 SSC 的 Nick 的 distinct 命令将您想要的信息存储为标量。

根据我的经验,这种包装方法已被证明比要求 StataCorp 的好人在他们不参与的互联网论坛上更改他们的命令更有效。

这是一个例子:

* (1) You can stick this into a file called mycodebook.ado in
* /ado/personal (use adopath to see exact location)
capture program drop mycodebook
program mycodebook, rclass
syntax [varlist] [if] [in][, *]
codebook `varlist' `if' `in', `options'
capture ssc install distinct
foreach var of varlist `varlist' {
    qui distinct `var' `if' `in'
    return scalar nv_`var' = r(ndistinct)
}
end

* (2) example with mycodebook
sysuse auto, clear
mycodebook price mpg rep78 if foreign==0, compact
return list

最后一部分将为您提供:

. mycodebook price mpg rep78 if foreign==0, compact

Variable   Obs Unique      Mean   Min    Max  Label
----------------------------------------------------------------------------------
price       52     52  6072.423  3291  15906  Price
mpg         52     17  19.82692    12     34  Mileage (mpg)
rep78       48      5  3.020833     1      5  Repair Record 1978
----------------------------------------------------------------------------------

. return list

scalars:
           r(nv_rep78) =  5
             r(nv_mpg) =  17
           r(nv_price) =  52

然后您可以执行以下操作(或您想对这些执行的任何操作):

gen x=r(nv_rep78)

【讨论】:

  • distinct(作者 Gary Longton 和我本人)的最新版本将从 Stata Journal 网站下载。 search distinct, sj 在 Stata 中获取安装链接。
【解决方案2】:

“独特”包提供了一个方便的替代方案。这是一个简单的例子:

* Install the unique package
ssc inst unique

* Load toy dataset
sysuse auto, clear

* Get a quick report of unique (and total) values for a variable
unique mpg

* The result will be available as r(unique)
return list

【讨论】:

    【解决方案3】:

    是的,你错了

    ssc install egenmore
    egen unique_values=nvals(mpg)
    

    【讨论】:

    • 我怕没有错!谢谢,但我有兴趣在codebook 之后存储这个值,这似乎是不可能的。请参阅尼克的回答。
    • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
    • @David 'mArm' Ansermot 这是一个答案。生成具有不同值数量的新变量是codebook 的替代方法。如果您阅读了提到的包的文档,这很简洁,但并不神秘。作为到目前为止在此线程中提到的两种代码解决方案的原作者,我个人会强调不同的答案,但 Noobie 在这里回答。
    • @NickCox 虽然这段代码可以回答这个问题,但提供关于它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。 meta.stackoverflow.com/questions/300837/…
    • 我不同意这一点,但是“没有提供答案”的断言太苛刻了,(我必须建议)基于看到一个简短的答案,而不是对此了解很多语言。我不认为回答问题的人有义务提醒其他人有关语言的基础知识,在这种情况下阅读与命令或包关联的 help 页面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    相关资源
    最近更新 更多