我有一个面板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
我想以某种方式自动化这个过程。
答案 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之间。