Stata 用最近观察到的平均值填充缺失

Stata 用最近观察到的平均值填充缺失,stata,missing-data,Stata,Missing Data,我想用最接近值的平均值来填充缺少的值。我以前使用过这种方法,但是,这次我有一个稍微复杂的设置,我认为运行这种方法的标准方法不起作用 如示例所示,缺失数据块的长度不相等或不是单个单元格。为了用观察到的最接近值的平均值填充它们,我想我需要一个两步解决方案:1确定两个最接近的值-前一个值和后一个值,如果这两个值中有一个缺失,只需使用步骤2中观察到的值,而不是它们的平均值2计算它们的平均值,并用该平均值填充缺失的值。数据是年度数据,嵌套在国家/地区。我发布了第一个国家阿尔巴尼亚的价值观 我需要对多个变量

我想用最接近值的平均值来填充缺少的值。我以前使用过这种方法,但是,这次我有一个稍微复杂的设置,我认为运行这种方法的标准方法不起作用

如示例所示,缺失数据块的长度不相等或不是单个单元格。为了用观察到的最接近值的平均值填充它们,我想我需要一个两步解决方案:1确定两个最接近的值-前一个值和后一个值,如果这两个值中有一个缺失,只需使用步骤2中观察到的值,而不是它们的平均值2计算它们的平均值,并用该平均值填充缺失的值。数据是年度数据,嵌套在国家/地区。我发布了第一个国家阿尔巴尼亚的价值观

我需要对多个变量执行此操作,因此循环解决方案可能最有效。但这只是一个次要问题,请毫不犹豫地发布一个没有循环的答案

country_name    year    gini
Albania 1990    
Albania 1991    
Albania 1992    
Albania 1993    
Albania 1994    
Albania 1995    
Albania 1996    28
Albania 1997    
Albania 1998    
Albania 1999    
Albania 2000    
Albania 2001    
Albania 2002    31.74
Albania 2003    
Albania 2004    
Albania 2005    30.6
Albania 2006    
Albania 2007    
Albania 2008    29.98
Albania 2009    
Albania 2010    
Albania 2011    
Albania 2012    28.96
Albania 2013    
Albania 2014    
Albania 2015    
Albania 2016    

谢谢大家!

这里有一个独立的示例,假设mipolate是由ssc inst mipolate安装的。pchip方法通常非常有效;然而,对于这些数据,我倾向于使用线性插值

clear 
input str7 country_name    year    gini
Albania 1990    .
Albania 1991    .
Albania 1992    .
Albania 1993    .
Albania 1994    .
Albania 1995    .
Albania 1996    28
Albania 1997    .
Albania 1998    .
Albania 1999    .
Albania 2000    .
Albania 2001    .
Albania 2002    31.74
Albania 2003    .
Albania 2004    .
Albania 2005    30.6
Albania 2006    .
Albania 2007    .
Albania 2008    29.98
Albania 2009    .
Albania 2010    .
Albania 2011    .
Albania 2012    28.96
Albania 2013    .
Albania 2014    .
Albania 2015    .
Albania 2016    .
end 

mipolate gini year, gen(linear) epolate by(country)  
mipolate gini year, gen(pchip) pchip by(country) 

line linear pchip year || scatter gini year, ms(Oh)  

已经实现了几种插值方法。没有必要发明你自己的。太好了,谢谢!我不知道mipolate命令。我添加了一个工作示例,使线程更有用。