删除所有连续缺失四个或更多观察的案例

时间:2017-11-23 23:41:08

标签: stata

我正在修剪Stata中的数据集,并且我希望在总资产变量中删除所有连续缺失4个或更多观察值的公司。我怎么能这样做?

数据如下所示:

enter image description here

我想放弃对b的所有观察,即使2000年有b的总资产价值。

2 个答案:

答案 0 :(得分:1)

在最终编辑中添加:

尼克考克斯的回答是正确的;这一点应该被忽视。第一组代码与现在出现在初始帖子中的问题的重述版本无关,第二组代码遭受Nick Cox在下面评论中指出的错误。

===============================

好吧,让我们假设(因为您还没有真正描述过您的数据),您有一个变量ta报告总资产,有时会丢失,变量{{1这会使每个公司失去信心,永远不会错过。然后

firmID

可能会做你想要的。如果bysort firmID: egen num_miss = total(missing(ta)) drop if num_miss >=4 缺失则函数missing(ta)将为1,否则为0,ta将包含当前num_miss缺少firmID的观察数量的计数}}

在回应Nick Cox上述评论时添加:

如果我们另外假设你有一个变量ta来定义"连续"的顺序。观察,你想放弃所有连续4次或更多连续观测值缺失的公司,然后以下可能会做你想要的。或者它可能没有 - 我没有对你没有提供的样本数据进行测试。

year

答案 1 :(得分:0)

为了完整性,如果标准确实是具有4个或更多个缺失的连续法术,则这是一个解决方案。如果我们遇到非缺失值,我们需要重新启动计数器。

在此示例中,id 1有四个缺失,但不是连续,而id 2有四个连续缺失。我们希望drop 2而不是1。

clear 
input id time y
1  1    .
1  2    .
1  3    1 
1  4    .
1  5    .
2  1    2 
2  2    .  
2  3    .
2  4    .
2  5    . 
end 

bysort id (time) : gen seq = missing(y) & (!missing(y[_n-1]) | _n == 1) 
by id : replace seq = seq[_n-1] + 1 if missing(y) & seq[_n-1] >= 1 & _n > 1 

list, sepby(id) 

     +---------------------+
     | id   time   y   seq |
     |---------------------|
  1. |  1      1   .     1 |
  2. |  1      2   .     2 |
  3. |  1      3   1     0 |
  4. |  1      4   .     1 |
  5. |  1      5   .     2 |
     |---------------------|
  6. |  2      1   2     0 |
  7. |  2      2   .     1 |
  8. |  2      3   .     2 |
  9. |  2      4   .     3 |
 10. |  2      5   .     4 |
     +---------------------+


bysort id (seq) : drop if seq[_N] >= 4 
(5 observations deleted)

另请参阅tsspell(SSC)和this paper on identifying spells in Stata