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