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

7 months ago
*!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<72>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