Stata 恢复每个国家/地区的最后可用观测数据
我试图只保留每个变量的最后可用观察值,然而,问题是每个国家在不同年份测量的变量不同。我的数据当前如下所示:Stata 恢复每个国家/地区的最后可用观测数据,stata,data-manipulation,data-wrangling,Stata,Data Manipulation,Data Wrangling,我试图只保留每个变量的最后可用观察值,然而,问题是每个国家在不同年份测量的变量不同。我的数据当前如下所示: iso3c year Gini variable1 variable2 variable3 AND 2000 . 1.279314 33 22 AND 2001 22 2.571869
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 |
+----------------------------------------------------------+
请注意,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 |
+----------------------------------------------------------+