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