* 1.3.1 LS 25 October 2002 * 1.3.0 NJC 25 October 2002 * 1.2.0 Lee Sieswerda 24 October 2002 * 1.1.0 NJC 22 October 2002 *! version 1.0 Lee Sieswerda 14 July 2002 prog define mrdum, rclass version 7.0 syntax varlist [if] [in], /* */ Stub(string) [RESponses(numlist int sort) LABels1(string) LABels2 ] * Observations to use marksample touse, novarlist quietly count if `touse' if r(N) == 0 { di as err "no observations" exit 2000 } else local total = r(N) * How many variables and possible responses? local nvar : word count `varlist' if "`responses'" == "" { numlist "1/`nvar'" local responses "`r(numlist)'" di _n as text "(responses assumed coded from 1 to `nvar')" } local nresp : word count `responses' * use of -tabdisp- depends on # responses <= _N if `nresp' > _N { di as txt "bailing out: more possible responses than rows" exit 0 } * Initialise variables tempvar values present percent * ! `present' is held as a string to protect it from -tabdisp- format qui { gen `values' = . gen str1 `present' = "" gen `percent' = . } label var `values' "responses" label var `present' "code present" label var `percent' "percent" if "`labels1'" != "" { label val `values' `labels1' } else if "`labels2'" ~= "" { foreach v of local varlist { local vallbl : value label `v' if "`vallbl'" != "" { label val `values' `vallbl' } } } quietly { * Mark cases that are completely missing tempvar nmiss egen `nmiss' = rmiss(`varlist') if `touse' replace `nmiss' = `nmiss' == `nvar' count if `nmiss' == 1 if r(N) { gen byte `stub'_miss = `nmiss' local misstxt "+ 1 for missing" replace `touse' = 0 if `nmiss' == 1 } count if `touse' local nonmiss = r(N) local i = 1 * Generate new dummy variables, one for each possible response foreach num of numlist `responses' { replace `values' = `num' in `i' egen `stub'_r`num' = /* */ eqany(`varlist') if `touse', values(`num') replace `stub'_r`num' = . if ~`touse' /* `stub'_miss == 1 */ count if `stub'_r`num' == 1 replace `present' = "`r(N)'" in `i' replace `percent' = 100 * `r(N)' / `nonmiss' in `i' local i = `i' + 1 } /* end foreach */ } /* end quietly */ tabdisp `values' if `values' < . , c(`present' `percent') format(%3.2f) * Summary measures local nonmissper = round(`nonmiss'/`total' * 100, 0.01) local miss = `total' - `nonmiss' di di as text `"Cases with at least one response `if': "' as result "`nonmiss' (`nonmissper' %)" di as text `" Completely missing `if': "' as result `miss' di as text " " di as text `" Total cases `if': "' as result `total' di " " di as text "Variables created for `nresp' possible responses `misstxt'" return local varlist `varlist' return local responses `nresp' end