Stata 当标识符包含在值列表中时,删除面板中的观察值
我有一个不平衡的面板,面板id为Stata 当标识符包含在值列表中时,删除面板中的观察值,stata,Stata,我有一个不平衡的面板,面板id为成员 我想从数据集中删除特定成员(即,在它们出现的每个面板中),并想删除那些出现在值列表/向量中的特定成员 如果我有成员的值列表(比如1,3,10,17,173928) 我想知道一种方法,可以删除列表中包含面板id(成员)的每个观察结果 该列表大约有1500个值,因此不需要手动键入 drop if member == 1 drop if member == 3 drop if member == 10 drop if member == 928 我想以某种方式
成员
我想从数据集中删除特定成员(即,在它们出现的每个面板中),并想删除那些出现在值列表/向量中的特定成员
如果我有成员的值列表
(比如1,3,10,17,173928)
我想知道一种方法,可以删除列表中包含面板id
(成员)的每个观察结果
该列表大约有1500个值,因此不需要手动键入
drop if member == 1
drop if member == 3
drop if member == 10
drop if member == 928
我想以某种方式自动化这个过程 @Brendan Cox(同名,非亲属)掌握了问题的核心。要展开一点:
首先请注意
drop if inlist(member,1,3,10,17,173,928)
这将是对代码的改进,但对于大量值来说既非法又不切实际:在这里,1500左右的值肯定是非常大的
在某个关键点,最好将标识符放入文件中并合并。有关这一精神的更多信息,请参阅
你在这里合并(暂时创建一个更大的数据集),即使你想创建一个更小的数据集,这并不是一个悖论<代码>合并
标识数据集的交叉点,这正是您希望删除的观察点
merge
创建数据集的联合只是使用该命令的主要和最明显的动机,但还有其他动机 您不指定列表的结构。请记住发布与您的问题相关的所有详细信息
下面是两个例子
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)
清除
激起更多
*-----案例1(另一个.dta文件中的列表)-----
//假想清单
输入///
识别码
1.
3.
结束
列表
临时文件mylist
保存“`mylist'”
//其余数据
清楚的
使用http://www.stata-press.com/data/r13/union.dta
如果idcode Aforeach
循环是可能的,则列出,但如果要删除的ID列表为“~1500个值长”,则最好使用merge
。如何存储要删除的ID列表?列表本身当前是excel文件中的一列。你能更详细地解释一下我将如何使用merge吗?我是Stata的新手,所以这可能是一个愚蠢的问题。在发布我的问题后阅读你的答案,但它们应该相互补充。你能更详细地解释一下如何使用合并功能吗?它是否会简单地添加一列(列表中成员的合并值),当该行中的成员编号不在列表中时,该列为空,当该行中的成员编号在列表中时,该列等于该成员编号?然后我简单地将观察结果放在具有合并值的列不是空的地方?还是我遗漏了什么?引用的FAQ确实解释了这一点。见第3节。我从您的问题中看到的唯一区别是,正如前面所解释的,您希望放弃
交叉口,而不是保留
它。