如果单个观察符合面板数据中的标准,则放弃整个主题
Dropping entire subject if single observation meets criterion in 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 中与此类似的东西会是什么?我肯定遗漏了一些东西并使它比应该的更复杂,但我无法弄清楚。
如果 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)实际上构建在标识符循环和每个标识符的观察循环中。使用主流编程语言的模型进行直译只会导致代码更长、效率更低。
我有一些表格的面板数据...
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 中与此类似的东西会是什么?我肯定遗漏了一些东西并使它比应该的更复杂,但我无法弄清楚。
如果 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)实际上构建在标识符循环和每个标识符的观察循环中。使用主流编程语言的模型进行直译只会导致代码更长、效率更低。