通过匹配的变量追加数据集

时间:2018-10-11 00:06:14

标签: append stata

我必须追加三个名为ABC的数据集,其中包含不同年份的数据(例如1990, 1991...2014)。

问题在于,并非所有数据集都包含所有调查年份,因此需要在添加之前手动删除不匹配的年份。

我想知道是否有任何方法可以追加三个(或更多)数据集,这些数据集将仅在数据集中保留匹配的变量(在这种情况下为年份)。

1 个答案:

答案 0 :(得分:2)

考虑以下玩具示例:

clear

input year var
1995 0
1996 1
1997 2
1998 3 
1999 4
2000 5
end

save data1, replace

clear

input year var
1995 6
1996 9
1998 7 
1999 8
2000 9
end

save data2, replace

clear

input year var
1995 10
1996 11
1997 12
2000 13
end

save data3, replace

没有可以强迫append做您想要的事情的选项,但是您可以执行以下操作:

use data1, clear

append using data2 data3
duplicates tag year, generate(tag)

sort year
list

     +------------------+
     | year   var   tag |
     |------------------|
  1. | 1995     0     2 |
  2. | 1995     6     2 |
  3. | 1995    10     2 |
  4. | 1996     9     2 |
  5. | 1996     1     2 |
     |------------------|
  6. | 1996    11     2 |
  7. | 1997     2     1 |
  8. | 1997    12     1 |
  9. | 1998     7     1 |
 10. | 1998     3     1 |
     |------------------|
 11. | 1999     8     1 |
 12. | 1999     4     1 |
 13. | 2000    13     2 |
 14. | 2000     5     2 |
 15. | 2000     9     2 |
     +------------------+

drop if tag == 1
list

     +------------------+
     | year   var   tag |
     |------------------|
  1. | 1995     0     2 |
  2. | 1995     6     2 |
  3. | 1995    10     2 |
  4. | 1996     9     2 |
  5. | 1996     1     2 |
     |------------------|
  6. | 1996    11     2 |
  7. | 2000    13     2 |
  8. | 2000     5     2 |
  9. | 2000     9     2 |
     +------------------+

您还可以通过找到变量tag的最大值并将所有观察值保持在该值上来进一步推广这种方法:

summarize tag
keep if tag == `r(max)'