*! Version 2.2.0 NJC 3 January 2001 STB-60 dm90 * 2.1.1 NJC 8 November 2000 * 2.1.0 NJC 20 Dec 1999 * 2.0.1 NJC 4 Nov 1998 * 1.2.0 NJC 8 Oct 1998 program define vallist, rclass version 6.0 syntax varname [if] [in] [, Labels MISSing Sep(str) Max(int 0) /* */ Words Format(str) noTrim Global(str) Quoted ] local maxlen = cond(_caller( ) == 6, 8, 32) if length("`global'") > `maxlen' { di in r "global name must be <=`maxlen' characters" exit 198 } if "`format'" != "" { /* try out format */ capture di `format' "abracadra" local rc = _rc capture di `format' 123456 if `rc' & _rc { error 120 } } if "`sep'" == "" { local sep " " } tempvar touse mark `touse' `if' `in' if "`missing'" == "" { markout `touse' `varlist', strok } capture confirm string variable `varlist' local isstr = _rc != 7 qui if `isstr' { /* string variable */ tempvar counter sort `touse' `varlist' by `touse' `varlist' : /* */ gen byte `counter' = 1 if _n == 1 & `touse' replace `counter' = sum(`counter') if `counter' < . su `counter', meanonly local nvals = r(max) sort `counter' local i = 1 while `i' <= `nvals' { if "`trim'" != "notrim" { local val = trim(`varlist'[`i']) } else local val = `varlist'[`i'] if "`val'" == "" { local val "missing" } if `max' { local val = substr(`"`val'"',1,`max') } if "`words'" != "" { local end = index(`"`val'"'," ") - 1 local val = substr(`"`val'"',1,`end') } if "`format'" != "" { local val : di `format' `"`val'"' } if "`quoted'" == "" { if `i' < `nvals' { local vals `"`vals'`val'`sep'"' } else local vals `"`vals'`val'"' } else { if `i' < `nvals' { local vals `"`vals'"`val'"`sep'"' } else local vals `"`vals'"`val'""' } local i = `i' + 1 } } else { /* numeric variable */ tempname Vals qui tab `varlist' if `touse', matrow(`Vals') `missing' local nvals = r(r) local lblname : value label `varlist' local i = 1 while `i' <= `nvals' { local val = `Vals'[`i',1] if "`labels'" != "" & "`lblname'" != "" { local val : label `lblname' `val' local val = trim(`"`val'"') if `max' { local val = substr(`"`val'"',1,`max') } if "`words'" != "" { local end = index(`"`val'"," ") - 1 local val = substr(`"`val'"',1,`end') } if "`format'" != "" { local val : di `format' `"`val'"' } } else { if "`format'" != "" { local val : di `format' `val' } } if "`quoted'" == "" { if `i' < `nvals' { local vals `"`vals'`val'`sep'"' } else local vals `"`vals'`val'"' } else { if `i' < `nvals' { local vals `"`vals'"`val'"`sep'"' } else local vals `"`vals'"`val'""' } local i = `i' + 1 } } di in g `"`vals'"' if "`global'" != "" { global `global' `"`vals'"' } * global S_1 `"`vals'"' return local list `"`vals'"' end