merge命令不匹配`matched`变量的变量

时间:2018-04-23 12:10:59

标签: stata

我有两个数据集。

包含我的大部分数据:

        ISIN    Name     Year      TotalAssets   Turnover   RoA  Employees

    1.  Nr1     Bank1    2005      30.000         1        0,5    300    
    2.  Nr1     Bank1    2006      31.000         1        0,3    300    
    3.  Nr1     Bank1    2007      28.000         1        0,3    280

    4.  Nr2     Bank2    2005      150.000        0        0,8    2000
    5.  Nr2     Bank2    2006      -              0        -      2200
    6.  Nr2     Bank2    2007      -              0        -      2200

    7.  Nr3     Bank3    2005      20.000         1        0,7    275

另一个包含第一个数据集中缺少的信息:

    ISIN   Name    Year   TotalAssets   RoA
1.  Nr2    Bank2   2005    150.000      0,8
2.  Nr2    Bank2   2006    180.000      1,3
3.  Nr2    Bank2   2007    170.000      0,7
4.  Nr2    Bank2   2008    150.000      0,4

当我使用以下方法组合这些数据集时:

merge 1:1 ISIN Year using "Dataset2" 

出于某种原因,只有master only (1)using only (2)匹配变量TotalAssetsRoA,而matched(3)则为TotalAssets的每个案例都提供缺失的数据{1}}和RoA变量。

合并后的数据集如下所示:

        ISIN    Name     Year      TotalAssets   Turnover   RoA  Employees   _merge

    1.  Nr1     Bank1    2005      30.000         1        0,5    300    master only (1)  
    2.  Nr1     Bank1    2006      31.000         1        0,3    300    master only (1)    
    3.  Nr1     Bank1    2007      28.000         1        0,3    280    master only (1)  

    4.  Nr2     Bank2    2005      150.000        0        0,8    2000   master only (1)  
    5.  Nr2     Bank2    2006      -              0        -      2200   matched(3)
    6.  Nr2     Bank2    2007      -              0        -      2200   matched(3)
    7.  Nr2     Bank2    2008      150.000        -        0,4    -      using only (2)

    8.  Nr3     Bank3    2005      20.000         1        0,7    275    master only (1)  

但是,matched不会显示其应该merge的变量的任何数据。

我做错了什么或者我会怎样以更好的方式去做?

2 个答案:

答案 0 :(得分:1)

查看help merge的选项,尤其是updatereplace。在您的特定情况下,看起来update选项就足够了(_merge==4)。 Stata会将master数据集视为不可侵犯,除非您明确说明如何在using数据集中处理同名变量。

答案 1 :(得分:1)

在这种特殊情况下,您需要的是update的{​​{1}}选项,而不是merge

使用您的示例:

replace

这给了你:

clear

input str10(ISIN) str10(Name) Year TotalAssets Turnover RoA Employees
Nr1 Bank1 2005 30000  1 0.5 300    
Nr1 Bank1 2006 31000  1 0.3 300    
Nr1 Bank1 2007 28000  1 0.3 280
Nr2 Bank2 2005 150000 0 0.8 2000
Nr2 Bank2 2006 .      0 .   2200
Nr2 Bank2 2007 .      0 .   2200
Nr3 Bank3 2005 20000  1 0.7 275
end

save data1, replace

clear

input str10(ISIN) str10(Name) Year TotalAssets RoA
Nr2 Bank2 2005 150000 0.8
Nr2 Bank2 2006 180000 1.3
Nr2 Bank2 2007 170000 0.7
Nr2 Bank2 2008 150000 0.4
end

save data2, replace

use data1,clear
merge 1:1 ISIN Year using data2, update

观察7中有两个缺失值,因为第二个数据集中不存在变量list +----------------------------------------------------------------------------------+ | ISIN Name Year TotalA~s Turnover RoA Employ~s _merge | |----------------------------------------------------------------------------------| 1. | Nr1 Bank1 2005 30000 1 .5 300 master only (1) | 2. | Nr1 Bank1 2006 31000 1 .3 300 master only (1) | 3. | Nr1 Bank1 2007 28000 1 .3 280 master only (1) | 4. | Nr2 Bank2 2005 150000 0 .8 2000 matched (3) | 5. | Nr2 Bank2 2006 180000 0 1.3 2200 missing updated (4) | |----------------------------------------------------------------------------------| 6. | Nr2 Bank2 2007 170000 0 .7 2200 missing updated (4) | 7. | Nr2 Bank2 2008 150000 . .4 . using only (2) | 8. | Nr3 Bank3 2005 20000 1 .7 275 master only (1) | +----------------------------------------------------------------------------------+ Turnover