我在Stata中有一个数据集,想按组(loc_ID
)和年份进行计数。我使用了以下两行代码:egen count_obsv = tag(loc_ID year)
这增加了一个计数器,以我的数据集(count_obsv
),这是1
(以及0
对于具有相同组合的每一个元素loc_ID
和year
)为每一个新的组合。然后我用:
collapse (sum) count_obsv, by(loc_ID year)
根据各种Stata论坛帖子,这应导致例如:
loc_ID year count_obsv
1 2000 342
1 2001 23
2 2008 23
...
但是我的输出是:
loc_ID year count_obsv
1 2000 1
1 2001 1
2 2008 1
...
我在总结什么错?
调用命令tag()
功能时egen
,将值1分配给任意数量的观察值中的一个,并为指定变量赋予相同的不同值,将0分配给所有其他值。然后,当您sum
在同一组观测中要求这些值的时,您将获得一个1和任意多个0的组和,因此每个和必定为1。
您的问题可能是从其他按预期工作的计算中抽象出来的,但是如果您想要的只是一个具有频率的数据集,那么
contract loc_ID year
会为你做的。如果您还想要一个包含其他变量汇总的数据集,则需要更多类似
collapse (count) count=foo (mean) mean=foo (sd) sd=foo, by(loc_ID year)
我怀疑是否有任何Statalist帖子都声明了其他情况。(我tag()
在1999年写过文章,但我并没有意识到这是一种误解。)有一个相关但可以说tag()
是有用的独特问题,它计算着独特的价值(通常称为独特价值)。
sysuse auto, clear
egen tag = tag(foreign rep78)
egen distinct = total(tag), by(foreign)
tabdisp foreign, c(distinct)
将是一种获取rep78
类别内不同值的数量的方法foreign
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句