楼主: econfj
6603 9

是不是字符变量不适合做merge时候的key variable? [推广有奖]

  • 1关注
  • 3粉丝

教授

19%

还不是VIP/贵宾

-

威望
0
论坛币
32534 个
通用积分
28.9504
学术水平
1 点
热心指数
5 点
信用等级
2 点
经验
1020 点
帖子
456
精华
0
在线时间
1621 小时
注册时间
2010-4-2
最后登录
2022-7-14

100论坛币
是不是字符变量不适合做merge时候的key variable?
用的是stata11

. use 07acqswitch.dta,clear
. sort deal_no xadv_code
. merge deal_no xadv_code using 04acq_loyalty.dta
(note: you are using old merge syntax; see [R] merge for new syntax)
variables deal_no xadv_code do not uniquely identify observations in the master data
variables deal_no xadv_code do not uniquely identify observations in 04acq_loyalty.dta

事实上,我试过下面的语句,
use 07acqswitch.dta,clear
bysort deal_no xadv_code:gen y=_n
发现出来的出来的y都是1,这足以证明deal_no xadv_code能uniquely identify observations。但是为什么会有上面的出错信息?

另外,有没有比较简单的检查是不是uniquely identify observations的命令?

最佳答案

sungmoo 查看完整内容

*以下过程不存在提示信息: clear inp y str1 z w 1 a 4 2 b 5 3 c 6 end sort y z save b,replace clear inp x y str1 z 5 1 d 6 2 b 7 3 c 8 4 a end sort y z mer y z using b
关键词:Variable Merge 字符变量 ABLE Key 变量 Variable 字符 Key Merge
沙发
sungmoo 发表于 2011-6-1 21:35:40 |只看作者 |坛友微信交流群
*以下过程不存在提示信息:
clear
inp y str1 z w
1 a 4
2 b 5
3 c 6
end
sort y z
save b,replace
clear
inp x y str1 z
5 1 d
6 2 b
7 3 c
8 4 a
end
sort y z
mer y z using b

使用道具

我觉得 “字符变量是可以做key variable的”请看下面这个网页里的举例(I think id is numeric, name is character):
http://kb.iu.edu/data/azck.html
use stat.dta, clear
sort id name
save stat.dta, replace


use math.dta, clear
sort id name


merge 1:1 id name using stat.dta


我认为:问题的关键是key variable在两个datasets内要等同。

另外,给你提供以下更多的网页资料作参考!
http://www.stata.com/help.cgi?merge
http://staff.washington.edu/glynn/statamrg.pdf
http://www.ats.ucla.edu/stat/stata/faq/multmerge.htm
http://www.swisspanel.ch/IMG/pdf/data_management_shp_stata11.pdf
http://userwww.service.emory.edu/~erein/courses/pols508/stata-programming-II.pdf
http://www.rpi.edu/~simonk/pdf/UsefulStataCommands.pdf
http://rlab.lse.ac.uk/data/statacourse/Lec2_a.pdf
http://fmwww.bc.edu/gstat/docs/merge.html
已有 1 人评分学术水平 热心指数 收起 理由
econfj + 1 + 1 热心解决问题!

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

使用道具

板凳
sungmoo 发表于 2011-6-2 06:11:05 |只看作者 |坛友微信交流群
econfj 发表于 2011-6-1 21:35
(note: you are using old merge syntax; see [R] merge for new syntax)
variables deal_no xadv_code do not uniquely identify observations in the master data
variables deal_no xadv_code do not uniquely identify observations in 04acq_loyalty.dta

事实上,我试过下面的语句,
use 07acqswitch.dta,clear
bysort deal_no xadv_code:gen y=_n
发现出来的出来的y都是1,这足以证明deal_no xadv_code能uniquely identify observations。但是为什么会有上面的出错信息?
最好把你的数据贴出来,并且清楚说明你想要的结果。

https://bbs.pinggu.org/thread-1089388-2-1.html是一个典型)

使用道具

报纸
sungmoo 发表于 2011-6-2 06:36:38 |只看作者 |坛友微信交流群
econfj 发表于 2011-6-1 21:35 用的是stata11
. use 07acqswitch.dta,clear
. sort deal_no xadv_code
. merge deal_no xadv_code using 04acq_loyalty.dta
(note: you are using old merge syntax; see [R] merge for new syntax)
variables deal_no xadv_code do not uniquely identify observations in the master data
variables deal_no xadv_code do not uniquely identify observations in 04acq_loyalty.dta
你还要看一下,出现后面这段文字后,命令是否仍执行,或者虽执行但得不到你想要的结果。

使用道具

地板
econfj 发表于 2011-6-10 22:10:47 |只看作者 |坛友微信交流群
4# sungmoo

出现后面这段文字后,命令是否仍执行,或者虽执行但得不到你想要的结果。
>命令仍然执行,等到想要的结果,这是一个1:1的merger,

假设左边的数据集合是x y z,右边是y z w。
我用bysort: x y:gen cnt=_n   结果出来的cnt都是1,这证明左边的数据集合是unique identified的。
右边得到同样的结果,
就是用 y z做key variable的时候,merge的过程出现上面那段文字。

y 是数字变量,z是字符变量。

这几天去开会,没上网:)

使用道具

7
sungmoo 发表于 2011-6-11 09:13:54 |只看作者 |坛友微信交流群
econfj 发表于 2011-6-10 22:10 >命令仍然执行,等到想要的结果,这是一个1:1的merger,
假设左边的数据集合是x y z,右边是y z w。
我用bysort: x y:gen cnt=_n   结果出来的cnt都是1,这证明左边的数据集合是unique identified的。
右边得到同样的结果,
就是用 y z做key variable的时候,merge的过程出现上面那段文字。
y 是数字变量,z是字符变量。
这几天去开会,没上网:)
还得把你的数据库贴出来,才能发现具体有什么问题。(我模拟的情况不存在上述提示信息)

使用道具

8
econfj 发表于 2011-6-14 17:49:17 |只看作者 |坛友微信交流群
4# sungmoo

事实上,我试过下面的语句,
use 07acqswitch.dta,clear
bysort deal_no xadv_code:gen y=_n
发现出来的出来的y都是1,这足以证明deal_no xadv_code能uniquely identify observations。但是为什么会有上面的出错信息?


>弄错了,bysort deal_no xadv_code:gen y=_n,发现出来的出来的y不都是1,有几个2. 最近的project数据集太大(超过10G),do文件太多(快30个)了。自己弄错了,但是印象中,当时弄的时候出来的都是1,不然也不会写上面的语句.  不知道为什么,可能调试的太频繁了。这篇文章,4个作者,弄了快5年了。
感谢版主,给你造成麻烦了:) 版主朋友,要不你upload一个文件,设置3000币,我来购买,聊表心意。

使用道具

9
econfj 发表于 2011-6-14 17:49:46 |只看作者 |坛友微信交流群
2# sungmoo

验证过,的确没有问题。当时还想是不是stata11的问题。

使用道具

10
听雨廊桥 学生认证  发表于 2017-6-6 22:12:13 |只看作者 |坛友微信交流群
如果新生成的字符串在两个dataset中的不等同,还能进行m:1的merge吗

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 12:22