使用Stata';s在多个变量块上保留命令

使用Stata';s在多个变量块上保留命令,stata,Stata,我刚开始研究一个有500万个观测值和很多很多变量的海量数据集。为了更快地处理这个问题,我只想选择一些感兴趣的变量,并去掉其余的变量 使用keep,我可以选择一个变量块,非常简单: keep varx1-x5 但是,我想要的变量在数据集中不是有序的: varx1 varx2 varx3 varz1 varz2 vary1 vary2 vary3 我不想要varz变量。我只想要带有varx和vary的块 所以。我不太擅长循环,但我试过: foreach varname of varlist v

我刚开始研究一个有500万个观测值和很多很多变量的海量数据集。为了更快地处理这个问题,我只想选择一些感兴趣的变量,并去掉其余的变量

使用
keep
,我可以选择一个变量块,非常简单:

keep varx1-x5 
但是,我想要的变量在数据集中不是有序的:

varx1 varx2 varx3 varz1 varz2 vary1 vary2 vary3
我不想要
varz
变量。我只想要带有
varx
vary
的块

所以。我不太擅长循环,但我试过:

foreach varname of varlist varx1-varx3 vary1-vary3  {
keep `varname'
}
这不起作用,因为它只保留
varx1
,然后尝试保留其他的
而出错,因为它们刚刚被删除


如何让
keep
选择多个变量块?

请尝试
drop
,它将仅删除您指定的变量,而不是使用
keep
,它将清除未提供给命令的变量。循环不是必需的。例如:

clear 
set obs 0

*----- example vars -----

gen varx1 = .
gen varx2 = .
gen varx3 = .
gen varz1 = .
gen varz2 = .
gen vary1 = .
gen vary2 = .
gen vary3 = .

*----- what you want -----

drop varz*

这两个命令都是联合记录的,因此
帮助保留
帮助删除
将使您达到目的。

不要使用
保留
,它将删除未提供给该命令的变量,请尝试
删除
,它将仅删除您指定的变量。循环不是必需的。例如:

clear 
set obs 0

*----- example vars -----

gen varx1 = .
gen varx2 = .
gen varx3 = .
gen varz1 = .
gen varz2 = .
gen vary1 = .
gen vary2 = .
gen vary3 = .

*----- what you want -----

drop varz*

这两个命令都是联合记录的,因此
帮助保留
帮助删除
将使您达到目的。

不要使用
保留
,它将删除未提供给该命令的变量,请尝试
删除
,它将仅删除您指定的变量。循环不是必需的。例如:

clear 
set obs 0

*----- example vars -----

gen varx1 = .
gen varx2 = .
gen varx3 = .
gen varz1 = .
gen varz2 = .
gen vary1 = .
gen vary2 = .
gen vary3 = .

*----- what you want -----

drop varz*

这两个命令都是联合记录的,因此
帮助保留
帮助删除
将使您达到目的。

不要使用
保留
,它将删除未提供给该命令的变量,请尝试
删除
,它将仅删除您指定的变量。循环不是必需的。例如:

clear 
set obs 0

*----- example vars -----

gen varx1 = .
gen varx2 = .
gen varx3 = .
gen varz1 = .
gen varz2 = .
gen vary1 = .
gen vary2 = .
gen vary3 = .

*----- what you want -----

drop varz*

这两个命令都是联合记录的,因此
help keep
help drop
将使您达到目的。

如果您不知道要删除的所有变量,请仅保留带有
varx
vary
的块:

keep varx* varz*

*
表示前面表达式的“匹配零或多个”。

如果您不知道要删除的所有变量,请仅保留带有
varx
vary的块:

keep varx* varz*

*
表示前面表达式的“匹配零或多个”。

如果您不知道要删除的所有变量,请仅保留带有
varx
vary的块:

keep varx* varz*

*
表示前面表达式的“匹配零或多个”。

如果您不知道要删除的所有变量,请仅保留带有
varx
vary的块:

keep varx* varz*

*
表示前面表达式中的“匹配零或多个”。

此处所述的
*
含义不正确。对于正则表达式来说这很好,但在这里它只意味着,例如,所有以
varx开头的变量
都有其他后缀。例如:
varx1
varx2
varxwhatever
help varlist
中的引号是“匹配一个或多个字符”。(原海报希望
保留
varx*
vary*
,而不是
varz*
)。我没有想到那是多么愚蠢。非常感谢。
*
所述含义在此上下文中不正确。对于正则表达式来说这很好,但在这里它只意味着,例如,所有以
varx开头的变量
都有其他后缀。例如:
varx1
varx2
varxwhatever
help varlist
中的引号是“匹配一个或多个字符”。(原海报希望
保留
varx*
vary*
,而不是
varz*
)。我没有想到那是多么愚蠢。非常感谢。
*
所述含义在此上下文中不正确。对于正则表达式来说这很好,但在这里它只意味着,例如,所有以
varx开头的变量
都有其他后缀。例如:
varx1
varx2
varxwhatever
help varlist
中的引号是“匹配一个或多个字符”。(原海报希望
保留
varx*
vary*
,而不是
varz*
)。我没有想到那是多么愚蠢。非常感谢。
*
所述含义在此上下文中不正确。对于正则表达式来说这很好,但在这里它只意味着,例如,所有以
varx开头的变量
都有其他后缀。例如:
varx1
varx2
varxwhatever
help varlist
中的引号是“匹配一个或多个字符”。(原海报希望
保留
varx*
vary*
,而不是
varz*
)。我没有想到那是多么愚蠢。非常感谢。谢谢你的回复。但是,对我的数据使用drop不是一个选项。我给出的例子是我必须处理的大量变量的一个非常简单的版本。因此,下降的过程非常低效。选择/保留:)更有意义。你有证据支持这个断言吗?无论您询问想要的变量还是不想要的变量,数据集的结果都是一样的。为什么你认为这对斯塔塔很重要?对不起,我从来没有看过你的帖子,现在我想不出我的理由了。那时候我是一个头脑发热的年轻人。谢谢你的回复。但是,对我的数据使用drop不是一个选项。我给出的例子是我必须处理的大量变量的一个非常简单的版本。因此,下降的过程非常耗时