按组计数并折叠

Count by groups and collapse

我在 Stata 中有一个数据集,想按组 (loc_ID) 和年份进行计数。我使用了以下两行代码: egen count_obsv = tag(loc_ID year)

这为我的数据集 (count_obsv) 添加了一个计数器,它是 1(对于具有相同 loc_ID 和 [= 的每个元素的 0 18=]) 对于每个新组合。 然后我使用:

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
...

我总结错了什么?

当您调用 egen 命令的 tag() 函数时,您将值 1 分配给指定变量具有相同不同值的任意数量的观察值之一,而 0对所有其他人。然后,当您在同一组观察中询问这些值的 sum 时,您会得到一个 1 和任意数量的 0 的组总和,因此每个总和必然为 1.

你的问题可能是从其他一些按你预期工作的计算中抽象出来的,但如果你想要的只是一个有频率的数据集,那么

contract loc_ID year 

会为你做的。如果你也想要一个包含其他变量摘要的数据集,你需要更像

的东西
collapse (count) count=foo (mean) mean=foo (sd) sd=foo, by(loc_ID year) 

我怀疑任何国家主义者的帖子都不是这样说的。 (我在 1999 年写了 tag(),我不认为这是一个误解。)有一个相关但可以说是不同的问题,其中 tag() 有用,它正在计算不同的值(通常称为唯一值)。

sysuse auto, clear 
egen tag = tag(foreign rep78) 
egen distinct = total(tag), by(foreign) 
tabdisp foreign, c(distinct) 

将是获取 foreign 类别中 rep78 的不同值数量的一种方法。