首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >合并改变我的价值观?

合并改变我的价值观?
EN

Stack Overflow用户
提问于 2013-01-06 01:11:10
回答 2查看 1.6K关注 0票数 3

我觉得我错过了一些最基本的东西。

我正在尝试合并Stata、FranceSQ.dta和FranceHQ.dta中的两个数据集。它们都有一个我创建的名为"uid“的变量,它唯一地标识了观察结果。

代码语言:javascript
代码运行次数:0
运行
复制
use FranceSQ, clear
merge 1:1 uid using FranceHQ, gen(_merge) keep(match)

现在让我困惑的是,它告诉我,uid不能唯一地识别我的观察结果。我意识到,当我打开FranceSQ时,一切都是正常的,当我查看我的uid变量时,我有以下值.

代码语言:javascript
代码运行次数:0
运行
复制
25010201
25010202
25010203
...

但是一旦我试图运行合并,它会改变我所有的值,所以我看到.

代码语言:javascript
代码运行次数:0
运行
复制
2.50101e+10
2.50101e+10
2.50101e+10
...

任何帮助都是非常感谢的.我相信有一个简单的答案,但它目前正在逃避我。

编辑*** *

所以尼克的建议很有帮助,谢谢!这就是我做的事情出了问题,所以我想知道是否有人能指出为什么它不起作用。

1)通过连接两个数值变量在每个dataset中创建uid变量,这些变量将uid变量转换为字符串。

2)我在整个dataset上运行destring (因为有很多不正确的转换变量),它将uid转换成一个双变量。

3)然后我把uid重铸成一根线。正因为如此,我才无法完成最初的合并。我注意到,它正在将我所有的观察结果更改为数据集中的最后一个值。

4)仅仅是因为我在调整,我就把uid变量重铸为double,并得到了相同的结果。

现在,我终于通过重新开始工作,而不是首先将uid变量重命名为字符串,但是我仍然不知道为什么我以前的努力没有工作,或者merge命令是如何决定改变我的值的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-06 09:53:49

很可能,这是一个精度问题。长整数需要保存在longdouble数据类型中。您可能需要在recast之前对一个标识符进行merge

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

票数 2
EN

Stack Overflow用户

发布于 2013-01-06 17:16:48

  1. 要检查变量是否真正标识了观察,请输入isid uid。如果uid在执行merge时不是唯一标识符,Stata会抱怨,但这本身就是一个有用的检查。如果uid在两个文件中都通过了检查,那么它仍然应该在合并的文件中这样做;它必须在至少一个源文件中失败,才能在合并的文件中失败。
  2. 除了尼克·考克斯关于数据类型的回答之外,问题可能只是格式问题。输入describe uid以找出当前格式,并可能是format uid %12.0f以消除科学符号。
  3. 我认为,当需要时,Stata将变量提升到更精确的格式,例如,当您使用具有非整数值的整数值变量时;当您在一个数据集中使用replace值时,当您在一个数据集中使用byte值,并且您在同一变量上从其他数据集中合并到float值时,应该发生同样的事情。
  4. 缺少uid中的值可能是Stata不相信这个变量工作正常的原因。在merge之前和之后也要检查这些内容(请参阅我前面提到的关于每种类型的有效范围的help data types )。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14178267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档