stata: merge 合并; reclink字符串的模糊合并; joinby 命令多对多匹配

1. merge横向精确合并

一般来说,用到stata进行数据合并,都应该是用1:1合并,这才能一一对应,所以,非一一对应的合并我就不说了。免得混乱。
    一般来说,善用生成的 _merge 变量来删除不要的匹配,再加上知道下面的几种情况怎么匹配,基本上已经够用了。
    (merge的用于匹配的变量格式必须一致,格式不一致的请参照命令help recast)
首先分析一下,用什么指标能唯一地识别出一个数据?显然,对应上面这个面板数据,用year和id两个指标,就能唯一的指明某一条数据。所以我们应用year和id这个组合来进行匹配。
        然后,选择其中一个数据集合作为原本的数据集合。另一个数据集合就用来匹配,匹配成功后就加进原来数据集里面。
        所以,上述的操作代码为:

//加载数据集1.dta
use "C:UsersAdministratorDesktop1.dta"
//根据year id两个维度来匹配数据
merge 1:1 year id using "C:UsersAdministratorDesktop2.dta"

互补的数据,你有我没有,我有你没有,我们只需要非空值。
要合并这个方法很简单,加一个update选项就可以了。update的意思是,如果原来的数据集合该数据为空,那么就使用匹配数据集里面的非空数据替换掉空数据。

//加载数据集1.dta
use "C:UsersAdministratorDesktop1.dta"
//根据year id两个维度来匹配数据
merge 1:1 year id using "C:UsersAdministratorDesktop2.dta",update

数据集1和数据集2的 var3 变量里面,有一部分是重叠的如果你想要原数据集(也就是数据集1)作为正确的数据,也就是这个:

//加载数据集1.dta
use "C:UsersAdministratorDesktop1.dta"
//根据year id两个维度来匹配数据
merge 1:1 year id using "C:UsersAdministratorDesktop2.dta",update

但是如果你认为匹配数据集(也就是数据集2)的数据才是正确的,也就是这样:

//加载数据集1.dta
use "C:UsersAdministratorDesktop1.dta"
//根据year id两个维度来匹配数据
merge 1:1 year id using "C:UsersAdministratorDesktop2.dta",update replace

merge 需要注意的事项:

m:1 表示keyword在using文件中必须是唯一没有重复的的
1:m 表示keywords在master文件中必须是唯一没有重复的

在merge的过程中有可能会出现报错,说year id对应的选项不唯一。可以用以下代码去保证数据的唯一

use "number_all.dta",clear
sort stkcd year              
by stkcd year: gen set=_n
keep if set==1
drop set

merge完之后结果窗口会出现下列信息,同时表格中会出现一个新的变量_merge,

当_merge为1时,该数据仅在主数据集中存在;

当_merge为2的时候,该数据仅在用于匹配的数据集中出现;

当_merge为3的时候才表示匹配成功,数据在两个数据集中同时存在。

接着我们可以直接keep if _merge==3,则可以保留匹配成功的数据,删除匹配不成功的数据。

如果我们需要进行多次merge,不要忘记将_merge变量删除。drop _merge就可以实现。

2. reclink字符串的模糊合并

use "baseinfo.dta",clear
gen id1=_n
save "baseinfo.dta",replace
use "iv.dta",clear
gen id2=_n
save "iv.dta",replace

use "baseinfo.dta",clear
reclink province using "iv.dta", idmaster(id1) idusing(id2) gen(matchscore)
list, clean noobs
drop _merge id1 id2
save "baseinfo.dta",replace

reclink 命令注意事项

  • 两份数据中 id 名必须不同。如,在上述命令中 idmaster(id1)idusing(id2) 分别代表 master data 中的 id 和 using data 中的 id,结果第五列和第七列解读为 master data中的id1 = 1 和 using data 中的 id2 = 1 匹配成功;
  • _merge 变量含义与前文类似;
  • reclink 命令可解决的匹配问题:大小写不同、部分字母缺漏或增加、以及顺序颠倒;
  • matchscore 变量为匹配分数,分数越高代表匹配效果越好
  • 另外,reclink 命令还允许对匹配变量设定不同权重。比如,在这个例子中,我们认为 city 是最重要的,则仅需增加 vmatch() 选项设定权重。具体示例如下:
    use file1.dta,clear
    reclink name city using file2.dta, idmaster(id1) idusing(id2) gen(matchscore) wmatch(1 15)
    list, clean noobs

     

原文地址:https://www.cnblogs.com/celine227/p/14653993.html