*! version 3.1.1 14-Dec-93. STB-17: dm16 program define lw version 3.1 local varlist "req ex min(1) max(1)" local if "opt" local in "opt" #delimit ; local options "Cols(integer -1) Dense Format(string) noHead Linenum N Obsno Rownum Width(integer -1)" ; #delimit cr parse "`*'" local size "`width'" local r = ("`rownum'"!="") | ("`n'"!="") | ("`obsno'"!="") local l = "`linenum'"!="" if `r' & `l' { di in red "may not specify both linenum and rownum" exit 198 } local dcols `cols' local minsize 10 local maxsize 32000 if `size'==-1 { local size 79 } else if `size'<`minsize' { local size `minsize' } else if `size'>`maxsize' { local size `maxsize' } local vtype : type `varlist' local strvar = substr("`vtype'", 1, 3)=="str" if `strvar' { local varwid = substr("`vtype'", 4, .) } else { if "`format'"=="" { local padding 1 if "`dense'"!="" { local padding 0 } lw_gfmt `varlist' "`if'" "`in'" `padding' 12 local format "$S_1" } else { capture display `format' 1 if _rc { error 120 } } local varwid = substr("`format'", 2, length("`format'")-3) } if `r' | `l' { /* Global S_LW contains a 1-character string relating to display of row numbers. $S_LW = "", equivalent to $S_LW = ".", is the default, and prints a space in front and a fullstop after each row number. Anything else prints square brackets [] around the row #'s. */ global S_LW = substr("$S_LW", 1, 1) if "$S_LW"=="." | "$S_LW"=="" | "$S_LW"==" " { local rleft local rright ". " } else { local rleft "[" local rright "]" } } quietly { count `if' `in' local obs = _result(1) if `obs'<1 { if "`head'"=="" { noi di in bl "(no observations)" } exit } if ("`if'"!="" & `obs'<_N) | `r' | `l' { tempvar row gen long `row' = _n } local i1 1 local i2 `obs' /* Only necessary to sort the data if `if' filter in use ... */ if "`if'"!="" & `obs'<_N { tempvar touse gen byte `touse' = 1 `if' `in' preserve sort `touse' `row' } /* ... otherwise, just parse the `in' macro to get case limits. */ else if "`in'"!="" { parse "`in'", parse("/ ") local i1 `2' local i2 `4' } /* `f' is number of characters occupied by largest row number (`i2') */ local f = int(log(`i2')/log(10)+1) } if `dcols'==-1 { if `r' { local cols = int(`size'/(`varwid'+`f'+6)) } else if `l' { local cols = int((`size'-`f'-6)/(`varwid'+1)) } else { local cols = int(`size'/(`varwid'+1)) } } global S_1 `cols' if `dcols'!=-1 { if `r' { local cols = int(`cols'/2) } else if `l' { local cols = `cols'-1 } } if `cols'<1 { local cols 1 } if "`head'"=="" { di in gr _n "`varlist' (listing " in ye `obs' /* */ in gr " observations):" _n } local i `i1' while `i'<=`i2' { local mod = mod(`i'-`i1'+1, `cols') if `mod' { local cont "_skip _cont" } else { local cont } if `r' | (`l' & `mod'==1) { if `mod'!=1 { di _skip(3) _cont } di in gr "`rleft'" %`f'.0f `row'[`i'] "`rright'" _cont } if `strvar' { local s = `varwid'-length(`varlist'[`i']) di in ye `varlist'[`i'] _skip(`s') `cont' } else { di `format' in ye `varlist'[`i'] `cont' } local i = `i'+1 } if `mod' { display } end