Stata:使用egen group()创建唯一标识符

Stata:使用egen group()创建唯一标识符,stata,panel-data,Stata,Panel Data,我有一个数据集,其中每一行都是一个公司,年份与一个公司ID配对,后者是一个字符串 如果我这样做 duplicates drop firmid year, force 它不会删除任何内容,因为没有重复项(我最初是在运行duplicates drop firmid year,force后创建数据集的) 到目前为止还不错。我想创建一个面板,它需要一个数字的firmid。所以我跑了 egen newid = group(firmid) xtset newid year 但会弹出“面板中的重复时间值”

我有一个数据集,其中每一行都是一个公司,年份与一个
公司ID
配对,后者是一个字符串

如果我这样做

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

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

egen newid = group(firmid)
xtset newid year
但会弹出“面板中的重复时间值”错误。而且

duplicates list newid year
列出了一大堆重复项


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

这是一个古老的主题,但我最近经历了相同的症状,所以我想分享我的解决方案。当然,只要提问者不提供进一步的细节,我们就不知道我和他的原因是否相同

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

egen long newid = group(firmid)

你能发布一个可复制的例子吗?例如,使用最小的数据输入来重新创建问题的完整的有问题的代码。有关在do文件中创建简短示例数据的信息,请参见
help input
。能否显示重复项的
firmid
?当有重复的时候,看到所有三个变量是很方便的。但是另一个考虑的方法是<代码>编码< /代码>,看。你已经把手指放在可能的问题上了,但是<代码>长通常是一个更好的替代方案,对于可能非常大的整数,因为
long
s占用4个字节,而不是8个字节,并且可以占用超过20亿的值。这几乎肯定是个问题。我当时正在处理美国人口普查局的机密数据,名单非常庞大。