You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
3.9 KiB
Plaintext
134 lines
3.9 KiB
Plaintext
*!Version 1.1
|
|
*!Data management utility: check for existence of variables in a dataset.
|
|
*!Authors: Amadou Bassirou DIALLO (World Bank) and Jean-Benoit Hardouin (Regional Health Observatory of Orléans)
|
|
|
|
program checkvars, rclass
|
|
version 8
|
|
syntax anything [if] [in] [, noList Tolerance(real 0) TAble noSUm GENMiss(namelist min=1 max=1)]
|
|
|
|
marksample touse
|
|
tempname rat
|
|
local av
|
|
local unav
|
|
local manymissings
|
|
|
|
quietly count if `touse'
|
|
local tot = r(N)
|
|
|
|
qui isvar `anything'
|
|
local badlist `r(badlist)'
|
|
local varlist `r(varlist)'
|
|
|
|
if "`table'"!="" {
|
|
if "`badlist'"!="" {
|
|
di _col(4)in green "Unavailable variables: " in ye "`badlist'"
|
|
di
|
|
}
|
|
di _col(4) in green "{hline 29}"
|
|
display _col(4) in gr "Existing" _col(15) in gr "Rate of"
|
|
display _col(4) in gr "Variable" _col(14) "missings" _col(24) "Available"
|
|
di _col(4) in green "{hline 29}"
|
|
}
|
|
|
|
tokenize `varlist'
|
|
local nbvar:word count `varlist'
|
|
|
|
forvalues i=1/`nbvar' {
|
|
capture assert missing(``i'') if `touse'
|
|
if !_rc {
|
|
if "`table'"=="" {
|
|
display in ye "``i''" in gr " is empty in the database." in ye " ``i''" in gr ///
|
|
" is not added to the available list"
|
|
}
|
|
else {
|
|
display _col(4) in gr "``i''" _col(14) "100.00%"
|
|
}
|
|
}
|
|
else {
|
|
if "`table'"=="" {
|
|
display in ye "``i''" in gr " exists and is not empty."
|
|
}
|
|
*if "`available'"~= "" {
|
|
quietly count if ``i'' >= . & `touse'
|
|
local num = r(N)
|
|
scalar `rat' = (`num'/`tot')*100
|
|
if "`table'"=="" {
|
|
display in ye "``i''" in gr " has " in ye r(N) in gr " missings."
|
|
display in gr "Ratio number of missings of" in ye " ``i''" in gr ///
|
|
" to total number of observations: " in ye %6.2f `rat' "%"
|
|
}
|
|
if `rat' <= `tolerance' {
|
|
local av `av' ``i''
|
|
if "`table'"=="" {
|
|
display in ye "``i''" in gr " is added to the available list."
|
|
}
|
|
else {
|
|
display _col(4) in gr "``i''" in ye _col(15) %6.2f `rat' "%" _col(32) "X"
|
|
}
|
|
}
|
|
else {
|
|
local manymissings `manymissings' ``i''
|
|
if "`table'"=="" {
|
|
display in ye "``i''" in gr " has too many missings, compared to the tolerance level."
|
|
display in ye "``i''" in gr " is not added to the available list."
|
|
}
|
|
else {
|
|
display _col(4) in gr "``i''" _col(15) in ye %6.2f `rat' "%"
|
|
}
|
|
}
|
|
*}
|
|
}
|
|
if "`table'"=="" {
|
|
di
|
|
}
|
|
}
|
|
if "`table'"!="" {
|
|
di _col(4) in green "{hline 29}"
|
|
}
|
|
|
|
return local available `av'
|
|
return local unavailable `badlist'
|
|
return local manymissings `manymissings'
|
|
|
|
if "`av'" ~= ""&"`sum'"=="" {
|
|
display _newline
|
|
display in ye _col(14) "Unweighted summary statistics for available variables:" _n
|
|
summarize `av' if `touse'
|
|
}
|
|
|
|
|
|
if "`list'"== "" {
|
|
display _newline
|
|
display in ye _d(97) "_"
|
|
display _newline
|
|
if "`badlist'"~="" {
|
|
display in gr "Unavailable variables: " in ye _col(45) "`badlist'" _n
|
|
}
|
|
if "`av'"~="" {
|
|
display in gr "Available variables: " in ye _col(45) "`av'" _n
|
|
}
|
|
if "`manymissings'"~="" {
|
|
display in gr "Available variables but with too missings: " in ye _col(45) "`manymissings'" _n
|
|
}
|
|
display in ye _d(97) "_"
|
|
}
|
|
|
|
if "`genmiss'" !="" {
|
|
capture confirm variable `genmiss'
|
|
if _rc!=0 {
|
|
qui gen `genmiss'=0
|
|
local nbav:word count `av'
|
|
tokenize `av'
|
|
forvalues i=1/`nbav' {
|
|
qui replace `genmiss'=`genmiss'+1 if ``i''>=.
|
|
}
|
|
}
|
|
else {
|
|
di in green "The variable" in ye " `genmiss' " in green "already exists".
|
|
}
|
|
|
|
}
|
|
|
|
|
|
end
|