【问题标题】:Count by groups and collapse按组计数并折叠
【发布时间】:2021-02-19 16:36:55
【问题描述】:

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

这会为我的数据集 (count_obsv) 添加一个计数器,即 1(对于每个新组合具有相同 loc_IDyear 组合的每个元素,0)。 然后我使用:

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

我总结错了什么?

【问题讨论】:

    标签: stata


    【解决方案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 不同值数量的方法。

    【讨论】:

      猜你喜欢
      • 2020-05-23
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 2020-11-26
      • 2023-03-07
      • 1970-01-01
      相关资源
      最近更新 更多