当标识符包含在值列表中时,删除面板中的观察值

时间:2015-11-20 12:19:30

标签: stata

我有一个面板ID为member

的不平衡面板

我想从数据集中删除特定成员(即在他们出现的每个面板中),并希望删除出现在值列表/向量中的特定成员。

如果我有member的值列表(比如说1,3,10,17,173,928) 我希望在列表中包含面板drop(成员)的每个观察点id

列表长度约为1500,因此不是手动输入

drop if member == 1
drop if member == 3
drop if member == 10

drop if member == 928

我想以某种方式自动化这个过程。

2 个答案:

答案 0 :(得分:1)

@Brendan Cox(同名,而不是亲戚)有这个问题的核心。扩大一点:

首先注意

drop if inlist(member,1,3,10,17,173,928)

对你的代码有所改进,但对于大量的值都是非法的和不切实际的:这里1500左右肯定有资格作为非常大的。

在某些关键点,将标识符放在文件merge中会更好。有关此精神的更多信息,请参阅http://www.stata.com/support/faqs/data-management/selecting-subset-of-observations/

即使你想制作一个较小的数据集,你merge在这里(临时制作一个更大的数据集)并不是一个悖论。 merge标识数据集的交集,这正是您希望drop的观察结果。创建数据集联盟的merge恰好是使用命令的主要和最明显的动机,但还有其他动机。

答案 1 :(得分:1)

您没有指定列表的结构方式。请记得发布与您的问题相关的所有详细信息。

以下两个例子。

clear
set more off

*----- case 1 (list in another .dta file) -----

// a hypothetical list
input ///
idcode
1
3
end

list

tempfile mylist
save "`mylist'"

// rest of data
clear
use http://www.stata-press.com/data/r13/union.dta
list if idcode <= 4, sepby(idcode) 

merge m:1 idcode using "`mylist'", keep(master)
list if idcode <= 4, sepby(idcode) 

*----- case 2 (list in a macro) -----

clear
use http://www.stata-press.com/data/r13/union.dta

// a hypothetical list
local mylist 1, 3

drop if inlist(idcode, `mylist')
list if idcode <= 4, sepby(idcode) 

help inlist提到以下限制:

  

参数的数量在2到255之间                            实际上,字符串为2到10之间。