R语言:扩展数据集生成面板数据并添加观测状态指示器
解决方法:用Stata的
fillin命令生成平衡面板 针对你的需求,不需要复杂的expand操作,Stata自带的fillin命令专门用来补全面板数据中缺失的个体-年份组合,一步就能搞定:
完整代码:
* 先按个体和年份排序(fillin命令要求数据已排序) sort individual_id year * 补全所有个体-年份的组合,自动生成_fillin变量(1=补的行,0=原数据行) fillin individual_id year * 生成present指示器:原数据存在为1,补的行是0 gen present = 1 - _fillin * 把补全行的rank设为缺失值 replace rank = . if _fillin * 清理临时变量,调整变量顺序 drop _fillin order year individual_id rank present
代码说明:
fillin individual_id year:会自动生成所有individual_id和year的笛卡尔积,也就是每个个体对应所有存在过的年份(你的数据里是2012、2014、2016),同时生成_fillin标记哪些行是新增的。present = 1 - _fillin:直接把原数据存在的行标记为1,新增的补全行标记为0,正好符合你的需求。replace rank = . if _fillin:把补全行的rank设为缺失,和目标数据集一致。
为什么你之前的expand方法不对:
你用expand只是复制了现有行,没办法生成不同年份的新行,所以只会得到重复的原年份数据,而不是每个个体覆盖所有目标年份的平衡面板。fillin才是处理这类问题的正确工具。
内容的提问来源于stack exchange,提问作者ClaraJ
相关产品推荐
相关产品推荐

