【问题标题】:Replace zeros with missing values in certain cases在某些情况下用缺失值替换零
【发布时间】:2015-03-14 22:57:55
【问题描述】:

我想知道是否有人知道执行以下操作的更简单方法:

我有一个按年份划分的医疗机构病例数数据集,其中每个观察结果都是一个医疗机构。设施是在不同年份“上线”的,因此有些设施在获得案件量值之前为零。此外,有些“停止”,因为他们确实提供了服务,但不再提供服务。我想用设施停产年份的缺失值替换零。在下面的示例中,第 3 和第 4 设施已停产,因此我想在第 3 和第 4 和 y2013y2014 中缺少y2014

y2011 y2012 y2013 y2014 0 0 76 82 0 0 29 13 0 0 25 0
5 10 0 0 0 0 17 24

我尝试了以下方法,效果很好,但我将有多年的数据需要处理(2000-2014),所以想知道是否有更有效的方法。

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)

我在去年弄乱了egen rowlast 以识别设施为零(这意味着它们已停产),但后来不知道该去哪里。

【问题讨论】:

    标签: stata


    【解决方案1】:

    您的问题将受益于对变量的循环。

    我们将 started 初始化为 0,当我们看到一个正值时改变我们对 started 的想法,如果 started 为 1,则将任何后续的 0 更改为缺失。

    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 之后,大多数此类数据的问题都会变得更容易。

    here for a survey of "rowwise" technique in Stata

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多