Stata 如果单个观察符合面板数据中的标准,则删除整个受试者

Stata 如果单个观察符合面板数据中的标准,则删除整个受试者,stata,panel-data,Stata,Panel Data,我有一些表格的面板数据 id | amount ----------- 1 | 10 1 | 10 1 | 100 2 | 10 2 | 15 2 | 10 3 | 100 我想做的似乎应该是相当简单的,但我对Stata的经验有限,我习惯于用类似C/Java的语言编程。基本上,如果某个人的观察值超过某个数量,我想删除整个人(id)。假设我将这个值设置为50,我想删除id1和id3中的所有观察值,这样数据将只包含id2中的观察值 Java中的伪代码将相当简单 for(int i =

我有一些表格的面板数据

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
         }
      }
   }
}
for(int i=0;i50{
int drop_id=dataset[i].id;
对于(int j=0;j

与此类似的Stata等价物是什么?我肯定错过了一些东西,使它变得比应该的更复杂,但我无法理解

如果金额上没有遗漏,这只是

bysort id (amount) : drop if amount[_N] > 50 
如果有遗漏,那么

gen ismissing = -missing(amount) 
bysort id (ismissing amount): drop if amount[_N] > 50 & amount[_N] < . 
gen ismissing=-缺失(金额)
bysort id(ismissing amount):如果amount[\N]>50和amount[\N]<,则删除。
这将是一种检查,尽管很难看出这些信息是如何有趣或有用


这里的机制(对于一个介绍,请参见)实际上构建在标识符上的循环中,并构建在每个标识符的观察上。使用主流编程语言的模型进行直译只会导致代码更长、效率更低

如果金额上没有遗漏,这只是

bysort id (amount) : drop if amount[_N] > 50 
如果有遗漏,那么

gen ismissing = -missing(amount) 
bysort id (ismissing amount): drop if amount[_N] > 50 & amount[_N] < . 
gen ismissing=-缺失(金额)
bysort id(ismissing amount):如果amount[\N]>50和amount[\N]<,则删除。
这将是一种检查,尽管很难看出这些信息是如何有趣或有用


这里的机制(对于一个介绍,请参见)实际上构建在标识符上的循环中,并构建在每个标识符的观察上。使用主流编程语言的模型进行直译只会导致代码更长、效率更低

太棒了,这个效果很好。也谢谢你的pdf,它肯定会帮助我更好地理解STATA。太棒了,这非常有效。也谢谢你的pdf,它确实帮助我更好地理解STATA。