program define gladder version 2.1 mac def _varlist "req ex max(1)" mac def _if "opt" mac def _in "opt" mac def _options "Bin(int -1) *" parse "%_*" capture assert %_varlist>0 %_if %_in if _rc { di in red "(nonpositive values encountered)" exit 411 } mac def _FN "%S_FN" quietly describe mac def _mobs = _result(4) mac def _mvar = _result(5) mac def _mwidth = _result(6) quietly save _user, replace capture { mac def _v %_varlist if "%_if`%_in"!="" { keep %_if %_in } drop if %_v==. if (_N<3) { di in red "insufficient observations" exit 421 /* new, but in series */ } keep %_v gen float _temp = %_v mac def _vrl : variable label %_v drop %_v rename _temp %_v label var %_v "%_vrl" sort %_v quietly by %_v: gen long _wgt = _N quietly by %_v: keep if _n==_N if %_bin<1 { #delimit ; mac def _bin = max( int(min(sqrt(_N),10*log(_N)/log(10))+.5), 2) ; di in gr "(option " in ye "bin(%_bin)" in gr " assumed)" ; #delimit cr } save _gladder, replace if %_mobs<=9*_N { mac def _newmobs = 10*_N drop _all capture set maxobs %_newmobs if _rc { di in red "insufficient memory" exit 950 } } drop _all _gladder 1 %_v "%_v^3" _gladder 2 %_v "%_v^2" _gladder 3 %_v "%_v" _gladder 4 %_v "sqrt(%_v)" _gladder 5 %_v "log(%_v)" _gladder 6 %_v "-1/sqrt(%_v)" _gladder 7 %_v "-1/%_v" _gladder 8 %_v "-1/(%_v^2)" _gladder 9 %_v "-1/(%_v^3)" use _1, clear append using _2 append using _3 append using _4 append using _5 append using _6 append using _7 append using _8 append using _9 capture label drop _group #delimit ; label define _group 1 cube 2 square 3 identity 4 sqrt 5 log 6 "1/sqrt" 7 "inverse" 8 "1/square" 9 "1/cube" ; label values _group _group ; label var _group "Transformation" ; sort _group ; capture noisily graph %_v =_wgt, by(_group) rescale normal bin(%_bin) %_options ; #delimit cr } mac def _rc = _rc drop _all capture set maxvar %_mvar width %_mwidth quietly use _user, clear mac def S_FN "%_FN" erase _user.dta capture erase _gladder.dta capture erase _1.dta capture erase _2.dta capture erase _3.dta capture erase _4.dta capture erase _5.dta capture erase _6.dta capture erase _7.dta capture erase _8.dta capture erase _9.dta exit %_rc end