我觉得我错过了一些最基本的东西。
我正在尝试合并Stata、FranceSQ.dta和FranceHQ.dta中的两个数据集。它们都有一个我创建的名为"uid“的变量,它唯一地标识了观察结果。
use FranceSQ, clear
merge 1:1 uid using FranceHQ, gen(_merge) keep(match)
现在让我困惑的是,它告诉我,uid不能唯一地识别我的观察结果。我意识到,当我打开FranceSQ时,一切都是正常的,当我查看我的uid变量时,我有以下值.
25010201
25010202
25010203
...
但是一旦我试图运行合并,它会改变我所有的值,所以我看到.
2.50101e+10
2.50101e+10
2.50101e+10
...
任何帮助都是非常感谢的.我相信有一个简单的答案,但它目前正在逃避我。
编辑*** *
所以尼克的建议很有帮助,谢谢!这就是我做的事情出了问题,所以我想知道是否有人能指出为什么它不起作用。
1)通过连接两个数值变量在每个dataset中创建uid变量,这些变量将uid变量转换为字符串。
2)我在整个dataset上运行destring (因为有很多不正确的转换变量),它将uid转换成一个双变量。
3)然后我把uid重铸成一根线。正因为如此,我才无法完成最初的合并。我注意到,它正在将我所有的观察结果更改为数据集中的最后一个值。
4)仅仅是因为我在调整,我就把uid变量重铸为double,并得到了相同的结果。
现在,我终于通过重新开始工作,而不是首先将uid变量重命名为字符串,但是我仍然不知道为什么我以前的努力没有工作,或者merge命令是如何决定改变我的值的。
发布于 2013-01-06 01:53:49
很可能,这是一个精度问题。长整数需要保存在long
或double
数据类型中。您可能需要在recast
之前对一个标识符进行merge
。
您应该通过查看describe
的结果来检查uid
在两个数据集中是否具有相同的数据类型。
发布于 2013-01-06 09:16:48
isid uid
。如果uid
在执行merge
时不是唯一标识符,Stata会抱怨,但这本身就是一个有用的检查。如果uid
在两个文件中都通过了检查,那么它仍然应该在合并的文件中这样做;它必须在至少一个源文件中失败,才能在合并的文件中失败。describe uid
以找出当前格式,并可能是format uid %12.0f
以消除科学符号。replace
值时,当您在一个数据集中使用byte
值,并且您在同一变量上从其他数据集中合并到float
值时,应该发生同样的事情。uid
中的值可能是Stata不相信这个变量工作正常的原因。在merge
之前和之后也要检查这些内容(请参阅我前面提到的关于每种类型的有效范围的help data types
)。https://stackoverflow.com/questions/14178267
复制