答案 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。