如果单个观察符合面板数据中的标准,则删除整个主题

时间:2016-05-06 17:42:30

标签: stata panel-data

我有一些表格的面板数据......

id | amount
-----------
1  | 10
1  | 10
1  | 100
2  | 10
2  | 15
2  | 10
3  | 100

我期待做的事情似乎应该相当简单,但我对Stata的体验有限,而且我习惯于使用类似于C / Java的语言进行编程。基本上,如果他们的任何个人观察超过一定数量,我想放弃一个完整的人(id)。因此,我要说我将此金额设置为50,我想删除id 1和id 3中的所有观察结果,这样数据就只会包含来自id的观察结果2.

Java中的伪代码非常简单......

for(int i = 0; i < dataset_length; i++) {
   if dataset[i].amount > 50 {
      int drop_id = dataset[i].id;
      for(int j = 0; j < dataset_length; j++) {
         if dataset[j].id == drop_id {
            delete observation
         }
      }
   }
}

Stata相当于什么类似的东西?我肯定错过了一些东西并使它变得比它应该的更复杂,但我无法弄明白。

1 个答案:

答案 0 :(得分:0)

如果amount没有遗漏,这只是

bysort id (amount) : drop if amount[_N] > 50 

如果有错过,那么

gen ismissing = -missing(amount) 
bysort id (ismissing amount): drop if amount[_N] > 50 & amount[_N] < . 

将是一种检查,虽然很难看出错失是如何有趣或有用的。

这里的机制(一个引言见here)实际上构建了一个循环标识符,以及每个标识符的观察结果。使用主流编程语言模型的直译可能只会导致代码更长,效率更低。