首页 文章

如何在Stata中“填充”数据集,但仅限于一定数量的行?

提问于
浏览
0

我有一个在特定时间点观察的数据集,但这些时间点(以及它们之间的时间长度)因组而异 . 我正在尝试“填充”数据,以便将现有观察结果转移到缺失的单元格中 . 但是我只想在原始观察之后对一定数量的行进行此操作 . 例如,我可以有一个如下所示的数据集:

enter image description here

对于A组,我想填写2002年的值与2001年的值,2004年与2003年等等 . 我根本不想填写2000年,因为我没有前面的值 . 而且我也不想填写2011年的 Value ,因为“cyclelength”变量告诉我A组的观察结果应该每两年进行一次,所以我不希望将数据传递过去 . 2011年只是一个真正缺失的 Value .

同样,在B组中,我希望将2000年的 Value 推进到2001年,2002年和2003年(因为这里的“周期长度”是4年) . 我想把2004年的 Value 带到2005年,2006年和2007年,但不会超过这个 - 晚年应该保持失踪 .

我已经尝试使用“carryforward”命令进行设置,但是没有想出如何在指定的年数后按组不同来停止填充 . 有没有办法做到这一点,无论是结转还是其他?

1 回答

  • 2

    这是自2000年以来作为常见问题记录的问题的变体:见here

    变化在于限制复制非缺失值的程度 . 但它容易陷入同样的想法 .

    在某些年份记录了最后一个已知值,我们可以复制数据集:

    gen when_last_known = year if !missing(value) 
      bysort group (year) : replace when_last_known = when_last_known[_n-1] if missing(when_last_known)
    

    现在需要更换的是

    by group : replace value = value[_n-1] if missing(value) & (year - when_last_known) < cyclelength
    

    该陈述预设了前一陈述的 sort 顺序 .

    在Statalist(see here)上,您需要记录 carryforward 是要从SSC安装的用户编写的命令 . 这也是一个很好的约定 .

    在实践中,良好的数据管理是保持原始数据的准确到达,并在变量的克隆上执行此操作 . 迟早有人会要求查看原始值,然后你可能会非常尴尬 .

相关问题