*!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