2014-03-26 34 views
0

我有一個數據集,其中每行是公司,年對,firmid是一個字符串。Stata:使用egen組()創建唯一標識符

如果我做

duplicates drop firmid year, force 

,因爲有沒有重複它不會刪除任何東西(我最初創建運行duplicates drop firmid year, force後的數據集)。

到目前爲止這麼好。我想創建一個需要數字的firmid的面板。所以我跑

egen newid = group(firmid) 
xtset newid year 

但'面板中重複的時間值'錯誤彈出。此外,

duplicates list newid year 

列出了一大堆重複。

看起來好像egen, group()沒有生成唯一的組。我的問題是:爲什麼,以及如何以穩健的方式創建獨特的羣組?

+1

請問您可以發佈一個可重複的示例嗎?例如,使用最小數據輸入完成有問題的代碼來重新創建問題。請參閱'help input'來在do-file中創建簡短的示例數據。 –

+0

你可以顯示重複的'firmid'嗎?當有重複時,查看所有三個變量將很方便。 –

+0

另一種需要考慮的方法是編碼,參見[help](http://www.stata.com/help.cgi?encode)。 – StasK

回答

2

這是一個古老的線程,但我最近經歷了相同的症狀,所以我想分享我的解決方案。當然,只要提問者沒有提供更多細節,我們也不會知道原因對我和他是否一樣。

問題原來是一個精度問題。正如4.4節中的here所解釋的那樣,以浮點形式存儲的整數的計算精確度僅在16,777,216範圍內。因此,如果您的樣本中有超過16,777,216家公司,則舍入誤差會導致將相同的ID分配給多家公司。通過將ID變量的精確度提高很長,可以直接處理這個問題:

egen long newid = group(firmid) 
+1

你已經把你的手指放在了可能的問題上,但「長」通常是一個更好的替代整數的可能性非常大,因爲「長」佔用4個字節而不是8個字節,可能會超過20億個值。 –

+0

這幾乎是絕對的問題。我正在與美國人口普查局的機密數據合作,名單很大。 – AsianYayaToure

+0

@NickCox:好點。我相應地編輯了我的答案。 – jphaller