楼主: bnuwwb
26376 8

求助:stata合并问题 [推广有奖]

副教授

18%

还不是VIP/贵宾

-

威望
1
论坛币
45859 个
通用积分
19.1512
学术水平
37 点
热心指数
50 点
信用等级
26 点
经验
4872 点
帖子
206
精华
0
在线时间
653 小时
注册时间
2007-8-30
最后登录
2024-4-1
毕业学校
中国人民大学

30论坛币
我现有一个大的数据,其中有year, code, type
一个小的数据,其中有year,type,num

想让这两个合并,难点在于如何让小数据根据code的不同自动复制,从而使合并后的数据不会有缺失值

也就是

大数据
year     type      code
1          11         a
2          22         a
3          33         a
1          11         b
2          22         b
3          33         b


小数据为

year     type     num
1          11        123
2           22        231
3           33        132

希望合并之后为
year     type      code      num
1          11         a          123
2          22         a          231
3          33         a          132
1          11         b          123
2          22         b          231
3          33         b          132

最佳答案

ruclaolan 查看完整内容

首先第一部分数据输入stata,命名为data1;然后第二部分数据输入stata,命名为data2;最后用下面的命令行(比如数据放在d:盘): clear cd d: use data1 merge 1:m year using data2 keep if merge==3 save data3 最终data3就是你要的结果
关键词:Stata tata type year code Stata Merge
有些东西只是比表面还要简单,只不过你只是看到一小部分
沙发
ruclaolan 发表于 2010-4-3 20:28:45 |只看作者 |坛友微信交流群
首先第一部分数据输入stata,命名为data1;然后第二部分数据输入stata,命名为data2;最后用下面的命令行(比如数据放在d:盘):
clear
cd d:
use data1
merge 1:m year using data2
keep if merge==3
save data3

最终data3就是你要的结果
laolan

使用道具

藤椅
bbs0805 发表于 2010-4-3 23:18:54 |只看作者 |坛友微信交流群
首先第一部分数据命名为a.dta;然后第二部分数据命名为b.dta
在此我不会发图片,只好用文本了,将就着看吧!

. use b.dta,clear
. list
     +-------------------+
     | year   type   num |
     |-------------------|
  1. |    1     11   123 |
  2. |    2     22   231 |
  3. |    3     33   132 |
     +-------------------+

. append using b.dta
. list
     +-------------------+
     | year   type   num |
     |-------------------|
  1. |    1     11   123 |
  2. |    2     22   231 |
  3. |    3     33   132 |
  4. |    1     11   123 |
  5. |    2     22   231 |
     |-------------------|
  6. |    3     33   132 |
     +-------------------+

. merge 1:1 _n using a.dta
    Result                           # of obs.
    -----------------------------------------
    not matched                             0
    matched                                 6  (_merge==3)
    -----------------------------------------

. list
     +----------------------------------------+
     | year   type   num   code        _merge |
     |----------------------------------------|
  1. |    1     11   123      a   matched (3) |
  2. |    2     22   231      a   matched (3) |
  3. |    3     33   132      a   matched (3) |
  4. |    1     11   123      b   matched (3) |
  5. |    2     22   231      b   matched (3) |
     |----------------------------------------|
  6. |    3     33   132      b   matched (3) |
     +----------------------------------------+

使用道具

板凳
bnuwwb 发表于 2010-4-4 15:02:56 |只看作者 |坛友微信交流群
2# ruclaolan

出错了,variables year do not uniquely identify observations in the master data
有些东西只是比表面还要简单,只不过你只是看到一小部分

使用道具

报纸
wbzdwss 发表于 2010-4-6 15:54:45 |只看作者 |坛友微信交流群
大数据是panel形式,合并前要设定,然后sort,加进去的那个也sort一下

使用道具

地板
extensive58 发表于 2010-5-24 15:39:04 |只看作者 |坛友微信交流群
请问bnuwwb同学
variables year do not uniquely identify observations in the master data这个问题怎么解决的。
谢谢!

使用道具

7
jzhyue 发表于 2010-5-24 20:10:07 |只看作者 |坛友微信交流群
bnuwwb 发表于 2010-4-4 15:02


出错了,variables year do not uniquely identify observations in the master data
merg m:1 year type using data2
试试:2# ruclaolan  修改
首先第一部分数据输入stata,命名为data1;然后第二部分数据输入stata,命名为data2;最后用下面的命令行(比如数据放在d:盘):
clear
cd d:
use data1
merge m:1 year type using data2
keep if merge==3
save data3

使用道具

8
hanlinxian246 发表于 2016-4-8 15:45:46 |只看作者 |坛友微信交流群
bbs0805 发表于 2010-4-3 23:18
首先第一部分数据命名为a.dta;然后第二部分数据命名为b.dta
在此我不会发图片,只好用文本了,将就着看吧 ...
果然是文字!

使用道具

9
hanlinxian246 发表于 2016-4-8 15:46:39 |只看作者 |坛友微信交流群
wbzdwss 发表于 2010-4-6 15:54
大数据是panel形式,合并前要设定,然后sort,加进去的那个也sort一下
xtset var1 var2

使用道具

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

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

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

GMT+8, 2024-4-28 17:21