* STB-17: dm16 program define lw_gfmt /* "" "" "" */ /* returns in S_1 a reasonable format */ version 3.1 local vn "`1'" local if "`2'" local in "`3'" local addamt `4' local cutoff `5' local t : type `vn' if substr("`t'",1,3)=="str" { tempvar l qui gen byte `l' = length(`vn') `if' `in' qui summ `l' local L = max(cond(_result(6)==.,1,_result(6)),1) global S_1 "%`L'.0s" exit } /* obtain units */ lw_unit `vn' `if' `in' local u $S_1 local m $S_2 local M $S_3 /* define r and d */ if `u'<1 & `u'!=0 { local r = length("`u'")-1 local d 1 } else { local r 0 local d 0 } /* define s */ local s = (`m'<0 | `M'<0) /* define l */ local l = cond(`m'==., 1, /* */ int(max(ln(abs(`m')),ln(abs(`M')))/ln(10) + 1) ) /* define L */ local L = `l' + `r' + `d' + `s' + `addamt' if `L'<=`cutoff' { global S_1 "%`L'.`r'f" } else global S_1 : format `vn' end