楼主: 我就爱维C
8767 5

[编程问题求助] 数据合并之mergemany和joinby命令 [推广有奖]

  • 3关注
  • 0粉丝

讲师

21%

还不是VIP/贵宾

-

威望
0
论坛币
185 个
通用积分
47.2619
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
9529 点
帖子
266
精华
0
在线时间
377 小时
注册时间
2015-6-20
最后登录
2024-5-10

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
最近在研究数据合并,自己琢磨了好久,从论坛、各种网站学习了很多,一点个人经验之谈,首先合并比较常用的命令有merge ,mergemany,joinby,主要讲讲mergemany和joinby。首先,mergemany命令的数据合并,以CHNS数据举例如下:
  1. use data1.dta ,clear
  2. sort commid hhid line wave
  3. save temp1
  4. use data2.dta ,clear
  5. sort commid hhid line wave
  6. save temp2
  7. use data3.dta ,clear
  8. sort commid hhid line wave
  9. save temp3
  10. mergemany 1:1 temp1 temp2 temp3  ,match (commid hhid line wave )
  11. save data22.dta
  12. erase temp1.dta
  13. erase temp2.dta
  14. erase temp3.dta
复制代码
在进行1对1合并的时候,特别是有多个数据集进行合并,mergemany使用就特别方便,但是不足之处是好像不能用于一对多或者多对一。
第二个,joinby的命令使用,举例如下:
  1. use data1.dta ,clear
  2. sort commid hhid line wave
  3. save temp1
  4. use data2.dta" ,clear
  5. sort commid hhid line  wave
  6. save temp2
  7. use temp1,clear
  8. joinby commid hhid line  wave using temp2,unmatched(both)_merge(_merge)//合并正常
  9. drop _merge
  10. save data11.dta
  11. erase temp1.dta
  12. erase temp2.dta

  13. use data11.dta ,clear
  14. sort commid hhid line wave
  15. save temp1
  16. use data3.dta,clear
  17. sort commid hhid line  wave
  18. save temp2
  19. use temp1,clear
  20. joinby commid hhid line  wave using temp2,unmatched(both)_merge(_merge)
  21. drop _merge
  22. save data22.dta
  23. erase temp1.dta
  24. erase temp2.dta
复制代码
     注意一,在数据合并使用joinby命令的时候,后面的选项unmatched(both)_merge(_merge)写上的话表示结果包括所有的观测值,如果去掉的话,stata只会显示匹配成功的数据,匹配未成功的数据不会显示。
      注意二,在数据合并使用joinby命令的时候,drop _merge要加上,表示去掉 _merge这个变量,要不然,进行第二步joinby数据合并的时候,会出现[color=rgba(255, 255, 0, 0)]"variable _merge already defined"这个错误,但是使用mergemany的时候不需要这一个步骤。
      经过自己的测试,上述mergemany和joinby 合并最终结果是一样的。

      最后提一点自己的小疑问,在使用merge的时候 ,通常比较顺利,但是偶尔也会出现报错,比如有的数据在merge时候总是报错 “变量不是唯一的标识”,但是检查之后发现也没有重复的变量,但是用joinby命令 就可以匹配 成功,不知道问题出现在哪里?希望有人解答一下我的这个疑惑。





二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:数据合并 unmatched Variable Matched Defined

沙发
溪韺s 发表于 2022-8-22 22:13:24 |只看作者 |坛友微信交流群
有的数据在merge时候总是报错 “变量不是唯一的标识”,但是检查之后发现也没有重复的变量,但是用joinby命令 就可以匹配 成功,不知道问题出现在哪里?希望有人解答一下我的这个疑惑。
我也出现这个了这种情况,请问一下您知道这个问题的原因吗?求问

使用道具

藤椅
_易殊_ 学生认证  发表于 2022-12-23 15:17:51 |只看作者 |坛友微信交流群
感谢楼主解我燃眉之急

使用道具

板凳
greyson123 发表于 2023-10-3 18:41:23 |只看作者 |坛友微信交流群
溪韺s 发表于 2022-8-22 22:13
我也出现这个了这种情况,请问一下您知道这个问题的原因吗?求问
可能是有完全空的观测值,你先把空的观测值drop 一下试试

使用道具

报纸
greyson123 发表于 2023-10-3 18:44:16 |只看作者 |坛友微信交流群
请问我用merge合并dta1和dta2之后得到合并文件1还想再merge dta3,于是把合并文件1和dta3 merge,并且先删除了-merge变量,但仍报错说-merge变量已经定义了,好奇怪啊

使用道具

地板
我就爱维C 发表于 2023-10-3 22:23:29 |只看作者 |坛友微信交流群
greyson123 发表于 2023-10-3 18:44
请问我用merge合并dta1和dta2之后得到合并文件1还想再merge dta3,于是把合并文件1和dta3 merge,并且先删除 ...
照说前面删除了_merge变量不会再出现这种情况,检查下变量列表看看

使用道具

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

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

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

GMT+8, 2024-5-12 06:11