在 varlist 中指定变量之前的变量处停止

Stopping at the variable before a specified variable in a varlist

我被困在一个棘手的数据管理问题上,我需要在 Stata 中解决这个问题。我使用的是 13.1 版。

我有 40 多个数据集需要使用每个数据集中不同的变量子集来处理。出于专有原因,我无法包含我正在做的数据或特定分析,但会尝试包含示例和代码。

我有一组数据集,A-Z。每个人都有一组问题,Q1Q200。我需要做一个分析,其中包括每个数据集的 varlist 条目,不包括最后几个问题(处理背景信息)。我知道此背景信息以某个问题(例如 "MALE / FEMALE")开头,尽管该问题的实际数字因数据集而异。

这是我到目前为止所做的:

foreach X in A B C D E F {
    use `X'_YEAR.dta, clear
    lookfor "MALE/FEMALE"
    local torename = r(varlist)
    rename `torename' MF
    ANALYSIS Q1 - MF
}

这行得通,但问题是我包括的变量实际上是我应该开始排除的地方的开始。我知道我可以将 varlist 保存为宏,然后使用宏中的放置来排除,例如,第七个变量。

但是,我坚持更进一步 - 将其用作 varlist 中的条目以在变量 MF 处停止。类似于 ANALYSIS Q1 - (MF - 1).

有谁知道这样的事情是否可行?

我已经在本网站和 Google 上搜索过这个问题,但没有找到好的解决方案。

抱歉,这是一个我错过的简单问题。

这是一种基于您的代码构建的方法。

. sysuse auto.dta, clear
(1978 Automobile Data)

. quiet describe, varlist

. local vars `r(varlist)'

. display "vars - `vars'"
vars - make price mpg rep78 headroom trunk weight length turn displacement gear_ratio foreign

. lookfor "Circle"

              storage   display    value
variable name   type    format     label      variable label
------------------------------------------------------------------------------------------------
turn            int     %8.0g                 Turn Circle (ft.)

. local stopvar `r(varlist)'

. display "stopvar - `stopvar'"
stopvar - turn

. local myvars

. foreach var in `vars' {
  2.     if "`var'" == "`stopvar'" continue, break
  3.         local myvars `myvars' `var'
  4.         }

. display "myvars - `myvars'"
myvars - make price mpg rep78 headroom trunk weight length

然后只要在需要分析变量列表的地方使用“myvars”即可。或者,如果您的变量列表总是以 Q1 开头,您可以将循环内的局部变量更改为

local lastvar `var'

并使用

Q1-`lastvar'

用于分析变量列表。