0

I'm stuck on a tricky data management question, which I need to do in Stata. I'm using version 13.1.

I have more than 40 datasets I need to work on using a subset of variables that is different in each dataset. I can't include the data or specific analysis I'm doing for proprietary reasons but will try to include examples and code.

I have a set of datasets, A-Z. Each has a set of questions, Q1 through Q200. I need to do an analysis that includes a varlist entry on each dataset that excludes the last few questions (which deal with background info). I know this background info starts with a certain question (e.g. "MALE / FEMALE") although the actual number for that question varies by dataset.

Here's what I have done so far:

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
}

That works but the problem is I'm including the variable that's actually the beginning of where I should start excluding. I know that I can save the varlist as a macro and then use the placement in the macro to exclude, for example, the seventh variable.

However, I'm stuck on taking that a step further - using this as an entry in the varlist to stop at the variable MF. Something like ANALYSIS Q1 - (MF - 1).

Does anyone know if something like that is possible?

I've searched for this issue on this site and Google and haven't found a good solution.

Apologies if this is a simple issue I've missed.

PSR
  • 197
  • 1
  • 7
  • Create a toy variable list (and a dataset if necessary) and show, by hand, what you want to wind up with. I really have no idea what you mean by "ANALYSIS Q1 - (MF - 1)". – Steve Samuels Jun 05 '15 at 20:07

1 Answers1

3

Here's one approach building on your code.

. 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

And then just use `myvars' wherever you need the list of analysis variables. Alternatively, if your variable list always starts with Q1, you can change the local within the loop to

local lastvar `var'

and use

Q1-`lastvar'

for the list of analysis variables.