*!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 checkfor2 , rclass version 8 syntax anything [if] [in] [, noList Tolerance(real 0) TAble noSUm GENMiss(namelist min=1 max=1) MISsing(string)] marksample touse tempname rat local av local unav local manymissings local avnum quietly count if `touse' local tot = r(N) qui isvar `anything' local badlist `r(badlist)' local varlist `r(varlist)' di _n if "`table'"!="" { if "`badlist'"!="" { di _col(4) in green "{hline 39}" di _col(4)in green "Unavailable variables: " foreach i of local badlist { di _col(4) in ye "`i'" } di _col(4) in green "{hline 39}" di } di _col(4) in green "{hline 39}" display _col(4) in gr "Existing" _col(15) in gr "Rate of" display _col(4) in gr "Variable" _col(14) "missings" _col(26) "Type" _col(34) "Available" di _col(4) in green "{hline 39}" } tokenize `varlist' local nbvar : word count `varlist' forvalues i=1/`nbvar' { capture assert missing(``i'') if `touse' local ty: type ``i'' local tty = substr("`ty'", 1, 3) 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 "`=abbrev("``i''",8)'" _col(15) in ye "100.00%" _col(26) "`ty'" } local manymissings `manymissings' ``i'' } else { if "`table'"=="" { display in ye "``i''" in gr " exists and is not empty." } *Consider type if "`tty'" == "str" { qui count if (``i'' == ""|``i''=="`missing'") & `touse' local num = r(N) scalar `rat' = (`num'/`tot')*100 } else { local avnum `avnum' ``i'' capture confirm number `missing' if _rc!=0 { quietly count if ``i'' >= . & `touse' } else { quietly count if (``i'' >= .|``i''==`missing') & `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 "`=abbrev("``i''",8)'" in ye _col(15) %6.2f `rat' "%" _col(26) "`ty'" _col(34) "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 "`=abbrev("``i''",8)'" _col(15) in ye %6.2f `rat' "%" _col(26) "`ty'" } } } if "`table'"=="" { di } } if "`table'"!="" { di _col(4) in green "{hline 39}" } return local available `av' return local unavailable `badlist' return local manymissings `manymissings' if "`avnum'" ~= ""&"`sum'"=="" { display _newline display in ye _col(14) "Unweighted summary statistics for available variables:" _n capture confirm number `missing' if _rc!=0 { summarize `avnum' if `touse' } else { foreach i of local avnum { summarize `i' if `touse'&`i'!=`missing' } } } 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' { local ty: type ``i'' local tty = substr("`ty'", 1, 3) if "`tty'" == "str" { qui replace `genmiss'=`genmiss'+1 if ``i''=="." } else { qui replace `genmiss'=`genmiss'+1 if ``i''>=. } } } else { di in green "The variable" in ye " `genmiss' " in green "already exists". } } end