Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stata 当标识符包含在值列表中时,删除面板中的观察值_Stata - Fatal编程技术网

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

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 我想以某种方式

我有一个不平衡的面板,面板id为
成员

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

如果我有
成员的值列表
(比如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 A
foreach
循环是可能的,则列出,但如果要删除的ID列表为“~1500个值长”,则最好使用
merge
。如何存储要删除的ID列表?列表本身当前是excel文件中的一列。你能更详细地解释一下我将如何使用merge吗?我是Stata的新手,所以这可能是一个愚蠢的问题。在发布我的问题后阅读你的答案,但它们应该相互补充。你能更详细地解释一下如何使用合并功能吗?它是否会简单地添加一列(列表中成员的合并值),当该行中的成员编号不在列表中时,该列为空,当该行中的成员编号在列表中时,该列等于该成员编号?然后我简单地将观察结果放在具有合并值的列不是空的地方?还是我遗漏了什么?引用的FAQ确实解释了这一点。见第3节。我从您的问题中看到的唯一区别是,正如前面所解释的,您希望
放弃
交叉口,而不是
保留
它。