3

我觉得我在这里遗漏了一些非常基本的东西......
我正在尝试合并 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)我通过连接两个数值变量在每个数据集中创建了 uid 变量,这将 uid 变量转换为字符串。
2)我在整个数据集上运行了 destring(因为有很多不正确的转换变量),这将 uid 变成了一个 double。
3)然后我将 uid 重铸为字符串。正是由于这个原因,我无法进行初始合并。我注意到它将我的所有观察结果更改为数据集中的最后一个值。
4) 仅仅因为我在调整,我将 uid 变量重铸为双精度,并且得到了相同的结果。

现在我终于通过重新开始而不是首先将 uid 变量重新转换为字符串来让它工作,但我仍然不知道为什么我以前的努力没有奏效,或者合并命令实际上是如何决定的改变我的价值观。

4

2 回答 2

2

很可能,这是一个精度问题。长整数需要保存在longdouble数据类型中。您可能需要recastmerge.

您应该通过查看两个数据集中describe是否uid具有相同数据类型的结果来检查。

于 2013-01-06T09:53:49.630 回答
2
  1. 要检查您的变量是否真正识别观察结果,请键入isid uid。无论如何, Statauid在执行时会抱怨 if is not a unique identifier merge,但这本身就是一个有用的检查。如果uid在两个文件中都通过了检查,它仍然应该在合并文件中这样做;它必须在至少一个源文件中失败才能在合并文件中失败。
  2. 除了尼克考克斯关于数据类型的回答之外,问题可能只是格式化。键入describe uid以找出当前格式是什么,并可能format uid %12.0f摆脱科学记数法。
  3. 我认为 Stata 在需要时将变量提升为更准确的格式,例如当您replace使用具有非整数值的整数值变量时;merge当您在一个数据集中说出byte值并且合并float来自另一个数据集中的同一变量的值时,也会发生同样的事情。
  4. 中的缺失值uid可能是 Stata 认为该变量不能正常工作的原因。在之前和之后也检查这些merge(请参阅help data types上面关于每种类型的有效范围的引用)。
于 2013-01-06T17:16:48.853 回答