我有一个在特定时间点观察的数据集,但这些时间点(以及它们之间的时间长度)因组而异。我试图"填写"数据使现有的观察结果进入缺失的细胞。但是我只想在原始观察后对一定数量的行进行此操作。例如,我可以有一个如下所示的数据集:
对于A组,我想填写2002年的价值,2001年的价值,2004年的2003年等等。我不想填写2000年,因为我没有前面的价值。而且我也不想填写2011年的价值,因为" cyclelength"变量告诉我,A组的观察结果应该每两年进行一次,所以我不希望将数据传递过去。 2011年只是一个真正缺失的价值。
同样,在B组中,我希望将2000年的价值推向2001年,2002年和2003年(因为"周期长度"这里是4年)。我希望将2004年的价值带入2005年,2006年和2007年,但不会超过这一点 - 晚年应该保持失踪。
我已尝试使用"结转"进行设置。命令,但是没有找到如何让它在指定的年数后停止填充,这些年份因组而异。有没有办法做到这一点,无论是结转还是其他?
答案 0 :(得分: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安装的命令。这也是一个很好的约定。
在实践中,良好的数据管理能够保持原始数据的准确性,并在变量的克隆上执行此操作。迟早有人会要求查看原始值,然后你可能会非常尴尬。