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

时间:2015-06-05 19:50:12

标签: stata stata-macros

我遇到了一个棘手的数据管理问题,我需要在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上搜索过这个问题,并且没有找到一个好的解决方案。

道歉,如果这是一个我错过的简单问题。

1 个答案:

答案 0 :(得分:3)

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

. 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'

表示分析变量列表。