Stata面板数据人均GDP增长率变量创建语法错误修复咨询
解决Stata面板数据人均GDP增长率计算的问题
嘿,这个问题我熟!你之前的语法出错是因为误解了Stata里方括号[]的用法——gdppc[2009]是调用第2009个观测值,而不是年份为2009的观测值。你的数据每个县域最多只有2个观测(2005和2009年),所以下标2009完全超出范围,自然生成的变量全是空值啦。
给你几种靠谱的修正方法:
方法1:利用排序后的观测位置(简单直接)
因为你已经用bysort panel_county_id (year)按县域和年份升序排序了,每个县域组里第一个观测是2005年,第二个是2009年,直接用位置下标计算就行:
bysort panel_county_id (year) : gen gdppc_r_2009 = (gdppc[2] - gdppc[1])/gdppc[1]
如果想把增长率只保留在2009年的观测里,可以加个条件:
bysort panel_county_id (year) : gen gdppc_r_2009 = (gdppc[2] - gdppc[1])/gdppc[1] if year == 2009
方法2:通过匹配年份取值(更稳妥,适合存在缺失年份的情况)
如果担心有些县域的年份顺序不对,或者缺失某一年的数据,先把两年的人均GDP提取出来再计算:
// 提取2005年的人均GDP并填充到同县域的所有观测 bysort panel_county_id : gen gdppc_2005 = gdppc if year == 2005 bysort panel_county_id : replace gdppc_2005 = gdppc_2005[1] // 提取2009年的人均GDP并填充到同县域的所有观测 bysort panel_county_id : gen gdppc_2009 = gdppc if year == 2009 bysort panel_county_id : replace gdppc_2009 = gdppc_2009[1] // 计算增长率 gen gdppc_r_2009 = (gdppc_2009 - gdppc_2005)/gdppc_2005
方法3:直接在方括号里用年份条件(简洁写法)
Stata允许在方括号里用条件表达式来定位观测,在bysort组内,条件会返回对应年份的观测位置,直接计算:
bysort panel_county_id : gen gdppc_r_2009 = (gdppc[year==2009] - gdppc[year==2005])/gdppc[year==2005]
需要注意的是,如果某个县域只有2005或2009其中一年的数据,计算出的增长率会是缺失值,这是正常的,你可以根据需求用drop if missing(gdppc_r_2009)来过滤这类观测。
内容的提问来源于stack exchange,提问作者Asteroid098




