[email protected]
>
> But I still have some troubles. I want to create a unique
> and global do file for
> twenty datasets from the same survey with almost the same variables.
>
> Suppose that I have the following local macro containing
> variables that may be
> present or not in a giving database (see below):
>
> local mylist "a b c d"
>
> I have 3 questions:
>
> 1/ I want to check for the presence of the 4 variables of
> the macro in the
> dataset. I thus apply David 's suggestions:
>
> foreach x of local mylist {
> capture confirm var `x'
> if _rc==0 {
> capture assert mi(`x')
> if _rc==0 {
> drop `x'
> }
>
>
> 2/ For the remaining variables, I want to take each one and
> create a new
> variable in the giving order : var1 with a, var2 with b,
> etc,... if they exist :
>
> else {
> g var1=a
> g var2=b
> g var3=c
> g var4=d
> }
> }
>
>
>
> My problem at this point is that I got the error message:
> var1 already exists
> (probably because of the looping).
This must reflect some code you are not showing us,
so it is difficult to make suggestions.
> 3/ In the third stage, I want to create more complicated variables:
>
>
>
> g var5=.
> replace var5=1 if a==1| b==1| c==1| d==1
>
> My problem is how to tell Stata to check for a, b, c, d and
> do the following:
> create var5 with the four variables in the datasets where
> they all exist,
> create var5 with any combination of them, if they do exist
> (at least one of
> them)
> or create nothing if none of them do exist (to avoid my
> program to stop)
Perhaps another approach would help. Let's do it one
by one:
capture confirm var a
if _rc == 0 {
gen var1 = a
local OKlist "a"
}
capture confirm var b
if _rc == 0 {
gen var2 = b
local OKlist "`OKlist' b"
}
capture confirm var c
if _rc == 0 {
gen var3 = c
local OKlist "`OKlist' c"
}
capture confirm var d
if _rc == 0 {
gen var4 = d
local OKlist "`OKlist' d"
}
What we're doing is
testing whether a variable exists
if it does {
use it to generate another one
add it to the list of variables which exist
}
=====================================
Aside: this can be re-expressed more
concisely, but possibly more cryptically:
tokenize a b c d
forval i = 1/4 {
capture confirm var ``i''
if _rc == 0 {
gen var`i' = ``i''
local OKlist "`OKlist' ``i''"
}
}
====================================
if trim("`OKlist'") != "" {
egen var5 = eqany(`OKlist'), v(1)
* next line optional
replace var5 = . if var5 == 0
}
Nick
[email protected]
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/