*! 1.0.0 NJC 2 August 2002 * qnorm version 2.1.9 13jun2000 program define qlognorm, sort version 7 syntax varname [if] [in] [, ml a(real 0.5) /* */ Symbol(string) Connect(string) T1(str) Grid noBorder * ] tempvar logvar Z Psubi quietly { marksample touse capture assert `varlist' > 0 if `touse' if _rc { error 411 } sort `touse' `varlist' gen float `Psubi' = sum(`touse') replace `Psubi' = (`Psubi' - `a') / (`Psubi'[_N] - 2 * `a' + 1) gen `logvar' = log(`varlist') if `touse' sum `logvar', detail if "`ml'" == "" { gen double `Z' = exp(invnorm(`Psubi') * r(sd) + r(mean)) } else { tempname factor scalar `factor' = sqrt((r(N) - 1) / r(N)) gen double `Z' = /* */ exp(invnorm(`Psubi') * r(sd) * `factor' + r(mean)) } label var `Z' "Inverse lognormal" local fmt : format `varlist' format `Z' `fmt' if "`symbol'" == "" { local symbol "oi" } else { local symbol "`symbol'i" } if "`t1'" != "" { local t1 t1(`t1') } if "`connect'" == "" { local connect ".l" } else { local connect "`connect'l" } if "`grid'" != "" { foreach s in p5 p10 p25 p50 p75 p90 p95 { tempname `s' scalar ``s'' = exp(r(`s')) } #delimit ; local ytl = string(`p5') + "," + string(`p50') + "," + string(`p95') ; local yn = "`ytl'" + "," + string(`p10') + "," + string(`p25') + "," + string(`p75') + "," + string(`p90') ; local xtl = string(exp(r(mean))) + "," + string(exp(invnorm(.95) * r(sd) + r(mean))) + "," + string(exp(invnorm(.05) * r(sd) + r(mean))) ; local xn = "`xtl'" + "," + string(exp(invnorm(.25) * r(sd) + r(mean))) + "," + string(exp(invnorm(.75) * r(sd) + r(mean))) + "," + string(exp(invnorm(.9) * r(sd) + r(mean))) + "," + string(exp(invnorm(.1) * r(sd) + r(mean))) ; #delimit cr local yl "yli(`yn') rti(`yn') rla(`ytl')" local xl "xli(`xn') tti(`xn') tla(`xtl')" if `"`t1'"' == "" { local t1 /* */ "t1(Grid lines are 5, 10, 25, 50, 75, 90, and 95 percentiles)" } noisily graph `varlist' `Z' `Z', c(`connect') /* */ s(`symbol') /* */ yli(`yn') rti(`yn') rla(`ytl') /* */ xli(`xn') tti(`xn') tla(`xtl') /* */ `options' `t1' t2(" ") } else { if "`border'" == "" { local b "border" } noisily graph `varlist' `Z' `Z', c(`connect') /* */ s(`symbol') `b' `options' `t1' } } end