【问题标题】:Stata: using egen group() to create unique identifiersStata:使用 egen group() 创建唯一标识符
【发布时间】:2014-05-05 15:20:36
【问题描述】:

我有一个数据集,其中每一行都是 公司,年份 对,firmid 是一个字符串。

如果我这样做了

duplicates drop firmid year, force

它不会删除任何内容,因为没有重复项(我最初在运行 duplicates drop firmid year, force 后创建了数据集)。

到目前为止一切顺利。我想创建一个面板,它需要一个数字的firmid。所以我跑了

egen newid = group(firmid)
xtset newid year

但弹出“面板中的重复时间值”错误。此外,

duplicates list newid year

列出一大堆重复项。

似乎egen, group() 没有生成唯一组。我的问题是:为什么以及如何以稳健的方式创建独特的组?

【问题讨论】:

  • 您能否发布一个可重现的示例?例如,具有最小数据输入的完整违规代码会重现问题。请参阅 help input 在 do 文件中创建简短的示例数据。
  • 你能显示重复的firmid 吗?当有重复时,查看所有三个变量会很方便。
  • 要考虑的另一种方法是encode,请参阅help

标签: stata panel-data


【解决方案1】:

这是一个老帖子,但我最近遇到了同样的症状,所以我想分享我的解决方案。当然,只要提问者不提供进一步的细节,我们将不知道我和他的原因是否相同。

问题原来是精度问题。正如第 4.4 节中的 here 所解释的,对存储为浮点数的整数进行的计算仅在高达 16,777,216 的范围内是精确的。因此,如果您的样本中有超过 16,777,216 家公司,则舍入误差将导致同一 ID 被分配给多个公司。这可以通过将 ID 变量的精度提高到 long 来直接处理:

egen long newid = group(firmid)

【讨论】:

  • 您已经解决了可能的问题,但long 通常是可能非常大的整数的更好选择,因为longs 占用 4 个字节而不是 8 个并且可以取值超过 20 亿。
  • 这几乎肯定是问题所在。我正在处理美国人口普查局的机密数据,而且这份清单非常庞大。
猜你喜欢
  • 1970-01-01
  • 2019-11-04
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 2011-08-25
相关资源
最近更新 更多