我想知道是否有人知道如何更简单地执行以下操作:
我每年都有一个医疗机构案例数据集,每个观察点都是一个医疗机构。设施在不同年份“上线”,因此有些设施在具有案件数量值之前就有零。此外,一些'停止',就像他们确实提供服务,但不再是。我想在设施停产的年份中用缺失值替换零。在下面的示例中,第3和第4个设施已停止使用,因此我希望第3个和y2014
&{第4次y2013
。
y2014
我尝试了下面的工作,但是我将会有很多年的数据(2000-2014),所以想知道是否有更有效的方法。
y2011 y2012 y2013 y2014
0 0 76 82
0 0 29 13
0 0 25 0
5 10 0 0
0 0 17 24
我和replace y2014=. if y2014==0 & (y2013>0 | y2012>0 | y2011>0)
replace y2013=. if y2013==0 & ( y2012>0 | y2011>0)
replace y2012=. if y2012==0 & ( y2011>0)
搞混了,以确定过去一年中零点的设施(意味着它们已停止),但后来不知道该去哪里。
答案 0 :(得分:1)
您的问题将受益于循环变量。
我们将started
初始化为0,当我们看到正值时改变我们对started
的看法,并在started
为1时将任何后续0更改为缺失。< / p>
gen started = 0
forval y = 2000/2014 {
replace started = 1 if y`y' > 0
replace y`y' = . if started == 1 & y`y' == 0
}
请注意,此方案允许重新启动。
更一般的评论是,这不是这种面板或纵向数据的更好的数据结构。这个特殊问题不是太具挑战性,但在reshape long
之后,这些数据的大多数问题会更容易解决。