I would not -recode- the original
variables. The scope for a large or even small mess
is such that it would be safer to do
this on copies of the original variables.
Or equivalently, keep your original
dataset file(s) very safe.
This is a sketch. Code not tested.
program fixmissing
version 8
syntax varlist
qui ds `varlist', has(vallabel)
local varlist "`r(varlist)'"
foreach v of local varlist {
qui levelsof `v', local(levels)
foreach l of local levels {
local label : label (`v') `l'
if index(`"`label'"', "Missing") {
recode `v' = .
}
else if index(`"`label'"', "missing") {
recode `v' = .
}
else if index(`"`label'", "did not respond") {
recode `v' = .a
}
// more lines likely
}
}
end
Alexander Nervedi
I have a complex survey dataset which has been helpfully cleaned - each
variable has its missing values coded with 9/99/999/999 or 98/998/9998 etc.
and things like Missing, Did not respond, refused to answer etc. are all
coded in as value labels.
I would like to treat all of these as missing and want to run a loop as
follow
local allvars x1 ... x100
foreach var of local allvars{
label list `var'
*pseudo code follows
scan label to see which levels include - "Missing", "missing", "did not
respond", etc
for each level `i' {
recode `var' (`i' = .)
}
}
I was wondering if this is something that could be reasonably be
implemented.
*
* 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/