[原创]stata合并数据集详细举例(merge)
- hellohappy
- 网站管理员
- 帖子: 306
- 注册时间: 2018年11月18日, 14:27
- Been thanked: 5 time
#1 [原创]stata合并数据集详细举例(merge)
前言:
一般来说,用到stata进行数据合并,都应该是用1:1合并,这才能一一对应,所以,非一一对应的合并我就不说了。免得混乱。
一般来说,善用生成的 _merge 变量来删除不要的匹配,再加上知道下面的几种情况怎么匹配,基本上已经够用了。
(merge的用于匹配的变量格式必须一致,格式不一致的请参照命令help recast)
下面是的例子。
例子1:
我有一个数据集1(文件名字为1.dta),他长这样(其中数据的内容我随便填的):
我还有一个数据集合2(文件名字为2.dta),他长这样:
显然上面两个数据集合就是个面板数据,我想要合并他们,变成下面这样:
我要怎么做呢?
首先分析一下,用什么指标能唯一地识别出一个数据?显然,对应上面这个面板数据,用year和id两个指标,就能唯一的指明某一条数据。所以我们应用year和id这个组合来进行匹配。(同样的,如果你的数据本身就是有唯一id,那就直接用这个唯一id来匹配,如果你的数据本身有多个维度才能唯一指定某一个数据,那你就需要多个变量的组合来匹配)
然后,选择其中一个数据集合作为原本的数据集合。另一个数据集合就用来匹配,匹配成功后就加进原来数据集里面。
比如这里把 1.dta 作为原数据集合。
所以,上述的操作代码为:
然后就完成了!
例子2:
我有一个数据集1(文件名字为1.dta),他长这样(其中数据的内容我随便填的):
我还有一个数据集合2(文件名字为2.dta),他长这样:
同样的我想要合并他们,变成下面这样:
这一次和上面不一样的是,他们是互补的数据,你有我没有,我有你没有,我们只需要非空值。
要合并这个方法很简单,加一个update选项就可以了。update的意思是,如果原来的数据集合该数据为空,那么就使用匹配数据集里面的非空数据替换掉空数据。
例子3:
我有一个数据集1(文件名字为1.dta),他长这样:
我还有一个数据集合2(文件名字为2.dta),他长这样:
你会发现,数据集1和数据集2的 var3 变量里面,有一部分是重叠的如果你想要原数据集(也就是数据集1)作为正确的数据,也就是这个:
你的代码就只需要跟例子2一样就行了。
但是如果你认为匹配数据集(也就是数据集2)的数据才是正确的,也就是这样:
你应该在update后面再加上replace。replace的意思是,当有冲突时候,使用匹配数据集的非空数据来替换原数据集的非空数据。
其实前面已经把stata的1:1匹配讲完了,如果你明白上面三个情况下怎么用,后面的例子应该也能明白怎么弄
例子4:
我有一个数据集1(文件名字为1.dta),他长这样:
我还有一个数据集合2(文件名字为2.dta),他长这样:
合并后同样的,长这样:
你会发现,这其实就是给原来的数据集1添加新的一年的数据:
方法其实就是和例子2、例子3一样!包括是否用匹配数据覆盖原数据,加不加replace,都是一样的。
例子5:
我有一个数据集1(文件名字为1.dta),他长这样:
我还有一个数据集合2(文件名字为2.dta),他长这样:
合并后同样的,长这样:
你会发现,这个例子其实就是例子4删掉了year==2013时候的样子。
所以这个怎么办啊?
。。。这个就是例子1的变形。代码也一样
一般来说,用到stata进行数据合并,都应该是用1:1合并,这才能一一对应,所以,非一一对应的合并我就不说了。免得混乱。
一般来说,善用生成的 _merge 变量来删除不要的匹配,再加上知道下面的几种情况怎么匹配,基本上已经够用了。
(merge的用于匹配的变量格式必须一致,格式不一致的请参照命令help recast)
下面是的例子。
例子1:
我有一个数据集1(文件名字为1.dta),他长这样(其中数据的内容我随便填的):
我还有一个数据集合2(文件名字为2.dta),他长这样:
显然上面两个数据集合就是个面板数据,我想要合并他们,变成下面这样:
我要怎么做呢?
首先分析一下,用什么指标能唯一地识别出一个数据?显然,对应上面这个面板数据,用year和id两个指标,就能唯一的指明某一条数据。所以我们应用year和id这个组合来进行匹配。(同样的,如果你的数据本身就是有唯一id,那就直接用这个唯一id来匹配,如果你的数据本身有多个维度才能唯一指定某一个数据,那你就需要多个变量的组合来匹配)
然后,选择其中一个数据集合作为原本的数据集合。另一个数据集合就用来匹配,匹配成功后就加进原来数据集里面。
比如这里把 1.dta 作为原数据集合。
所以,上述的操作代码为:
Code: 全选
//加载数据集1.dta
use "C:\Users\Administrator\Desktop\1.dta"
//根据year id两个维度来匹配数据
merge 1:1 year id using "C:\Users\Administrator\Desktop\2.dta"
例子2:
我有一个数据集1(文件名字为1.dta),他长这样(其中数据的内容我随便填的):
我还有一个数据集合2(文件名字为2.dta),他长这样:
同样的我想要合并他们,变成下面这样:
这一次和上面不一样的是,他们是互补的数据,你有我没有,我有你没有,我们只需要非空值。
要合并这个方法很简单,加一个update选项就可以了。update的意思是,如果原来的数据集合该数据为空,那么就使用匹配数据集里面的非空数据替换掉空数据。
Code: 全选
//加载数据集1.dta
use "C:\Users\Administrator\Desktop\1.dta"
//根据year id两个维度来匹配数据
merge 1:1 year id using "C:\Users\Administrator\Desktop\2.dta",update
例子3:
我有一个数据集1(文件名字为1.dta),他长这样:
我还有一个数据集合2(文件名字为2.dta),他长这样:
你会发现,数据集1和数据集2的 var3 变量里面,有一部分是重叠的如果你想要原数据集(也就是数据集1)作为正确的数据,也就是这个:
你的代码就只需要跟例子2一样就行了。
Code: 全选
//加载数据集1.dta
use "C:\Users\Administrator\Desktop\1.dta"
//根据year id两个维度来匹配数据
merge 1:1 year id using "C:\Users\Administrator\Desktop\2.dta",update
你应该在update后面再加上replace。replace的意思是,当有冲突时候,使用匹配数据集的非空数据来替换原数据集的非空数据。
Code: 全选
//加载数据集1.dta
use "C:\Users\Administrator\Desktop\1.dta"
//根据year id两个维度来匹配数据
merge 1:1 year id using "C:\Users\Administrator\Desktop\2.dta",update replace
其实前面已经把stata的1:1匹配讲完了,如果你明白上面三个情况下怎么用,后面的例子应该也能明白怎么弄
例子4:
我有一个数据集1(文件名字为1.dta),他长这样:
我还有一个数据集合2(文件名字为2.dta),他长这样:
合并后同样的,长这样:
你会发现,这其实就是给原来的数据集1添加新的一年的数据:
方法其实就是和例子2、例子3一样!包括是否用匹配数据覆盖原数据,加不加replace,都是一样的。
Code: 全选
//加载数据集1.dta
use "C:\Users\Administrator\Desktop\1.dta"
//根据year id两个维度来匹配数据
merge 1:1 year id using "C:\Users\Administrator\Desktop\2.dta",update
例子5:
我有一个数据集1(文件名字为1.dta),他长这样:
我还有一个数据集合2(文件名字为2.dta),他长这样:
合并后同样的,长这样:
你会发现,这个例子其实就是例子4删掉了year==2013时候的样子。
所以这个怎么办啊?
。。。这个就是例子1的变形。代码也一样
Code: 全选
//加载数据集1.dta
use "C:\Users\Administrator\Desktop\1.dta"
//根据year id两个维度来匹配数据
merge 1:1 year id using "C:\Users\Administrator\Desktop\2.dta"
Link: | |
Hide post links |
#2 Re: [原创]stata合并数据集详细举例(merge)
您好 我尝试了最后一个例子,发现数据集合2的时间“2013”并没有加入到合并后的结果中。 请问您可以实现吗
Link: | |
Hide post links |
- hellohappy
- 网站管理员
- 帖子: 306
- 注册时间: 2018年11月18日, 14:27
- Been thanked: 5 time
#3 Re: [原创]stata合并数据集详细举例(merge)
没有把,我刚刚也试了一下,是可以合并进去的。
合并命令执行完毕后,截图是这样的:
合并以后有一个变量叫 _merge ,这个变量里面,赋值为1、 2、 3,分别代表观测值是 from master,from using 或 matched。
上面截图中
from master 的数字 12 就是原来的数据集1里面有,而匹配数据集2没有的观测值个数,
from using 的数字 4 就是原来的数据集1里面没有,而匹配数据集2有的观测值个数,
matched 的数值 0 就是原来的数据集1里面有,而匹配数据集2也有的观测值个数。
可能你数据集写错了,我把这个样例数据集合传上来,你再回去试一下吧。
最后一个例子的数据集1和2:
Link: | |
Hide post links |
#4 Re: [原创]stata合并数据集详细举例(merge)
你好 您的方法没有问题 最后一个例子可以实现
是我在将csv转成dta文件时出了错误
insheet using C:\Users\Administrator\Desktop\TRD_Week.csv
describe
save "C:\Users\Administrator\Desktop\TRD_Week.dta"
insheet using C:\Users\Administrator\Desktop\TRD_Week2.csv
describe
save "C:\Users\Administrator\Desktop\TRD_Week2.dta"
TRD_Week.csv 和 TRD_Week2.csv 是不同的 但是得到的TRD_Week.dta 却和TRD_Week2.dta 一模一样
是我在将csv转成dta文件时出了错误
insheet using C:\Users\Administrator\Desktop\TRD_Week.csv
describe
save "C:\Users\Administrator\Desktop\TRD_Week.dta"
insheet using C:\Users\Administrator\Desktop\TRD_Week2.csv
describe
save "C:\Users\Administrator\Desktop\TRD_Week2.dta"
TRD_Week.csv 和 TRD_Week2.csv 是不同的 但是得到的TRD_Week.dta 却和TRD_Week2.dta 一模一样
Link: | |
Hide post links |