恢复每个国家 Stata 的最后可用观察

Recovering Last Available Observation Per country Stata

我试图只保留每个变量的最后可用观察值,但是,问题是每个国家/地区的不同变量是在不同年份测量的。我的数据目前看起来像这样:

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                

请注意,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 |
     +----------------------------------------------------------+