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


1. merge橫向精確合並

一般來說,用到stata進行數據合並,都應該是用1:1合並,這才能一一對應,所以,非一一對應的合並我就不說了。免得混亂。
    一般來說,善用生成的 _merge 變量來刪除不要的匹配,再加上知道下面的幾種情況怎么匹配,基本上已經夠用了。
    (merge的用於匹配的變量格式必須一致,格式不一致的請參照命令help recast)
首先分析一下,用什么指標能唯一地識別出一個數據?顯然,對應上面這個面板數據,用year和id兩個指標,就能唯一的指明某一條數據。所以我們應用year和id這個組合來進行匹配。
        然后,選擇其中一個數據集合作為原本的數據集合。另一個數據集合就用來匹配,匹配成功后就加進原來數據集里面。
        所以,上述的操作代碼為:

//加載數據集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的意思是,如果原來的數據集合該數據為空,那么就使用匹配數據集里面的非空數據替換掉空數據。

//加載數據集1.dta
use "C:\Users\Administrator\Desktop\1.dta"
//根據year id兩個維度來匹配數據
merge 1:1 year id using "C:\Users\Administrator\Desktop\2.dta",update

數據集1和數據集2的 var3 變量里面,有一部分是重疊的如果你想要原數據集(也就是數據集1)作為正確的數據,也就是這個:

//加載數據集1.dta
use "C:\Users\Administrator\Desktop\1.dta"
//根據year id兩個維度來匹配數據
merge 1:1 year id using "C:\Users\Administrator\Desktop\2.dta",update

但是如果你認為匹配數據集(也就是數據集2)的數據才是正確的,也就是這樣:

//加載數據集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

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

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM