Warm tip: This article is reproduced from serverfault.com, please click

data manipulation-恢复每个国家/地区上次可用的观测值

(data manipulation - Recovering Last Available Observation Per country Stata)

发布于 2020-12-06 22:45:01

我想仅保留每个变量的最新可用观测值,但是问题是,每个国家/地区的变量在不同年份进行了测量。我的数据当前如下所示:

iso3c year  Gini          variable1         variable2                variable3
AND   2000       .          1.279314         33                        22
AND   2001      22          2.571869         .                          .
AND   2002       .          3.492054         .                          .
AND   2003      44          3.89996          .                           

这是我的代码:

gsort + iso3c - year
drop if Gini==. & variable1==.      &     variable2==.       &       variable3==.
bysort iso3c: keep if _n==1 
drop year

我使用下面的一个变量尝试了此操作,然后运行了其他几行,效果很好。

drop if Gini==. 

但是,由于我在每个国家/地区的不同年份中使用的变量有所不同,因此最终Stata仅保留以下内容:

iso3c Gini     variable1            variable2            variable3

AND    44           3.89996          .                   .                               

但是,我想要这样的事情,即使对变量2和3的最后可用观测值也要从2000年开始保存,即使在2004年未对变量进行测量。

iso3c Gini      variable1            variable2                variable3

AND    44           3.89996          33                        22                
Questioner
maldini425
Viewed
0
Nick Cox 2020-12-07 16:59:12

请注意,这collapse (lastnm) Gini variable*, by(iso3c)是一种单线解决方案。

让我们还展示如何从基本原理中获得相似的东西。

一旦将非缺失排序到面板的末尾(临时),就可以访问每个面板中的最后一个非缺失值。如果没有非缺失值可用,则必然会返回缺失值。

clear 
input str3 iso3c year Gini variable1 variable2 variable3
AND 2000 . 1.279314 33 22
AND 2001 22 2.571869 . .
AND 2002 . 3.492054 . .
AND 2003 44 3.89996 . . 
end 

gen OK = . 

foreach v in Gini variable1 variable2 variable3 { 
    replace OK = !missing(`v')
    bysort iso3c (OK year) : gen `v'_lnm = `v'[_N] 
}

sort iso3c year 
list iso3c year *lnm 

     +----------------------------------------------------------+
     | iso3c   year   Gini_lnm   va~1_lnm   va~2_lnm   va~3_lnm |
     |----------------------------------------------------------|
  1. |   AND   2000         44    3.89996         33         22 |
  2. |   AND   2001         44    3.89996         33         22 |
  3. |   AND   2002         44    3.89996         33         22 |
  4. |   AND   2003         44    3.89996         33         22 |
     +----------------------------------------------------------+