*! version 6.4 11JAN2022 DIME Analytics dimeanalytics@worldbank.org capture program drop ieboilsave program ieboilsave , rclass syntax , IDVARname(varlist) [DIOUTput missingok tagnoname tagnohost] qui { preserve local origversion "`c(version)'" version 11.0 //Checking that only one id variable is listed if `:list sizeof idvarname' > 1 { noi di as error "{phang}Multiple ID variables in idvarname(`idvarname') are not allowed. While it is not always incorrect, it is bad practice, see {help ieboilsave##IDnotes:Notes on ID variables} for more details.{p_end}" noi di "" error 103 exit } /********************************* ID variables *********************************/ capture isid `idvarname' if _rc { //Test missing capture assert !missing(`idvarname') if _rc { count if missing(`idvarname') noi di as error "{phang}The ID variable `idvarname' is missing in `r(N)' observation(s). The ID variable needs to be fully identifying, meaning that no values can be a missing values (., .a, .b ... .z) or the empty string{p_end}" noi di "" } //Test duplicates tempvar iedup duplicates tag `idvarname', gen(`iedup') count if `iedup' != 0 if r(N) > 0 { sort `idvarname' noi di as error "{phang}To be uniquely identifying the ID variable should not have any duplicates. The ID variable `idvarname' has duplicate observations in the following values:{p_end}" noi list `idvarname' if `iedup' != 0 } noi di "" error 148 exit } /********************************* Missing values *********************************/ if "`missingok'" == "" { local varsStandMiss ds, has(type numeric) foreach variable in `r(varlist)' { cap assert `variable' != . if _rc { local varsStandMiss `varsStandMiss' `variable' } } if `:list sizeof varsStandMiss' > 0 { noi di as error "{phang}There are `:list sizeof varsStandMiss' numeric variable(s) that contains the standard missing value (.) which is bad practice. A list of the variable(s) are stored in the local {cmd:r(standmissvars)}. Extended missing variables should be used. See {help ieboilsave} for more details.{p_end}" return local standmissvars "`varsStandMiss'" error 416 exit } } restore /********************************* Output success messages *********************************/ // ID //Store the name of idvar in data set char and in notes char _dta[ie_idvar] "`idvarname'" local idOut "The uniquely and fully identifying ID variable is `idvarname'. " // Version char _dta[ie_version] "`origversion'" local versOut "This data set was created in Stata version `origversion'" // Date char _dta[ie_date] "`c(current_date)'" local dateOut " on `c(current_date)'." // Name local nameOut "" local hostOut "" if "`tagnoname'" == "" { char _dta[ie_name] "`c(username)'" if "`tagnohost'" == "" { char _dta[ie_host] "`c(hostname)'" local hostOut ", by user `c(username)' using computer `c(hostname)'," } else { local nameOut ", by user `c(username)'," } } // Missing vars if "`missingok'" == "" { local missOut "There are no regular missing values in this data set" } else { local missOut "This data set was not tested for missing values" } char _dta[ie_boilsave] "ieboilsave ran successfully. `idOut'`versOut'`nameOut'`hostOut'`dateOut' `missOut'" if "`dioutput'" != "" { local outputSum : char _dta[ie_boilsave] noi di "" noi di "{phang}`outputSum'{p_end}" } } end