我有一个数据集,其中每一行都是一个固定的年份对,firmid其中一个是字符串。
如果我做
duplicates drop firmid year, force
Run Code Online (Sandbox Code Playgroud)
它不会删除任何内容,因为没有重复项(我最初在运行后创建了数据集duplicates drop firmid year, force)。
到目前为止,一切都很好。我想创建一个需要firmid数字的面板。所以我跑
egen newid = group(firmid)
xtset newid year
Run Code Online (Sandbox Code Playgroud)
但会弹出“面板中的重复时间值”错误。而且,
duplicates list newid year
Run Code Online (Sandbox Code Playgroud)
列出一大堆重复项。
似乎并egen, group()没有产生独特的群体。我的问题是:为什么以及如何以稳健的方式创建独特的群组?
这是一个旧线程,但我最近遇到了相同的症状,所以我想分享我的解决方案。当然,只要提问者不提供更多细节,我们就无法知道我和他的原因是否相同。
问题原来是精度问题。正如第 4.4 节中所解释的,对存储为浮点数的整数进行的计算仅在 16,777,216 以内的范围内才精确。因此,如果样本中的公司超过 16,777,216 家,舍入误差将导致将相同的 ID 分配给多个公司。通过将 ID 变量的精度增加到 long 可以直接解决这个问题:
egen long newid = group(firmid)
Run Code Online (Sandbox Code Playgroud)