*! version 1.0.3 MLB 04Feb2013
*! version 1.0.2 MLB 22Jan2013
program define asl_norm_ex
	version 11
    if "`1'" == "1" {
        Msg preserve
        preserve
        Xeq sysuse auto, clear
		Xeq set seed 123456
        Xeq asl_norm trunk, dh reps(19999)
        Msg restore 
        restore
    }
    if "`1'" == "2" {
        Msg preserve
        preserve
        Xeq sysuse nlsw88, clear
		Xeq gen lnwage = ln(wage)
        Xeq set seed 123456
		Xeq asl_norm lnwage if union < ., dh reps(19999)
		Xeq qnorm lnwage if union < .
        Msg restore 
        restore
    }
	if "`1'" == "3" {
		capture which qplot
		local noqplot = ( _rc > 0 )
		capture which qenvchi2
		local noqenv = ( _rc > 0 )
		capture which simpplot
		local nosimpplot = ( _rc > 0 )
		if `noqplot' & !`noqenv' & !`nosimpplot' {
			di as err ///
"{p}this example requires the qplot package; type " as input "findit qplot" as err " to get this {p_end}"
			exit 199
		}
		if !`noqplot' & `noqenv' & !`nosimpplot' {
			di as err ///
"{p}this example requires the qenv package; type " as input "ssc install qenv" as err " to get this {p_end}"
			exit 199		
		}
		if `noqplot' & `noqenv' & !`nosimpplot'{
			di as err ///
"{p}this example requires the qplot and qenv package; type " as input "findit qplot" as err " and " as input "ssc install qenv" as err " to get these {p_end}"
			exit 199
		}
		if !`noqplot' & !`noqenv' & `nosimpplot'{
			di as err ///
"{p}this example requires the simpplot package; type " as input "ssc install simpplot" as err " to get this {p_end}"
			exit 199
		}		
		if `noqplot' & !`noqenv' & `nosimpplot'{
			di as err ///
"{p}this example requires the qplot and simpplot package; type " as input "findit qplot" as err " and " as input "ssc install simpplot" as err " to get these {p_end}"
			exit 199
		}
		if `noqplot' & `noqenv' & `nosimpplot'{
			di as err ///
"{p}this example requires the qplot, qenv and simpplot package; type " as input "findit qplot" as err ", " as input "ssc install qenv" as err " and " as input "ssc install simpplot" as err " to get these {p_end}"
			exit 199
		}
		Msg preserve
		preserve
		Xeq set seed 12345
		Xeq sysuse auto, clear

		Msg tempfile res
		tempfile res
		Msg asl_norm trunk, jb sktest reps(1999) saving("\`res'", replace)
		asl_norm trunk, jb sktest reps(1999) saving("`res'", replace)
		Msg use "\`res'"
		use "`res'"
		Xeq qenvchi2 sktest, gen(lb ub) df(2) overall reps(5000)

		Msg tempname qplot
		tempname qplot 
		
		Msg qplot sktest jbtest lb ub, trscale(invchi2(2,@)) ///
			ms(o o none ..) c(. . l l)  lc(gs10 ..)    ///
			scheme(s2color) ylab(,angle(horizontal))   ///
			legend(order( 1 "sktest"                   ///
						  2 "Jarque-Bera"              ///
						  3 "95% simultaneaous"        ///
					        "Monte Carlo CI"))         ///
			name(\`qplot')
							
        qplot sktest jbtest lb ub, trscale(invchi2(2,@)) ///
			ms(o o none ..) c(. . l l)  lc(gs10 ..)    ///
			scheme(s2color) ylab(,angle(horizontal))   ///
			legend(order( 1 "sktest"                   ///
						  2 "Jarque-Bera"              ///
						  3 "95% simultaneaous"        ///
					        "Monte Carlo CI"))         ///
			name(`qplot')

		Xeq gen p_sk = chi2tail(2,sktest)
		Xeq label var p_sk "sktest"
		Xeq gen p_jb = chi2tail(2,jbtest)
		Xeq label var p_jb "Jarque-Bera"
		
		Xeq simpplot p_sk p_jb, overall reps(19999)          ///
				scheme(s2color) ylab(,angle(horizontal))
		Msg restore
		restore
	}
	
	if "`1'" == "4" {
        Msg preserve
        preserve
        Xeq sysuse nlsw88, clear
		Xeq gen lnwage = ln(wage)
		Xeq set seed 123456
        Xeq asl_norm lnwage  
		Xeq qnorm lnwage
        Msg restore 
        restore
    }
	if "`1'" == "5" {
		capture which qplot
		local noqplot = ( _rc > 0 )
		capture which qenvnormal
		local noqenv = ( _rc > 0 )
		if `noqplot' & !`noqenv' {
			di as err ///
"{p}this example requires the qplot package; type " as input "findit qplot" as err " to get this {p_end}"
			exit 199
		}
		if !`noqplot' & `noqenv' {
			di as err ///
"{p}this example requires the qenv package; type " as input "ssc install qenv" as err " to get this {p_end}"
			exit 199		
		}
		if `noqplot' & `noqenv' {
			di as err ///
"{p}this example requires the qplot and qenv package; type " as input "findit qplot" as err " and " as input "ssc install qenv" as err " to get these {p_end}"
			exit 199
		}
		
		Msg preserve
		preserve
		Xeq sysuse nlsw88, clear
		Xeq gen lnwage = ln(wage)
		Xeq qenvnormal lnwage, gen(lb ub) overall reps(19999)
		Xeq sum lnwage
		Msg qplot lnwage lb ub, ms(oh none ..) c(. l l) lc(gs10 ..)        ///
				  legend(off) ytitle("ln(wage)") xtitle(Normal quantiles)  ///
				  trscale(\`r(mean)' + \`r(sd)' * invnormal(@)) 
				  
		qplot lnwage lb ub, ms(oh none ..) c(. l l) lc(gs10 ..)       ///
		      legend(off) ytitle("ln(wage)") xtitle(Normal quantiles) ///
			  trscale(`r(mean)' + `r(sd)' * invnormal(@))
		Msg restore
		restore
	}
end

program Msg
    di as txt
    di as txt "-> " as res `"`macval(0)'"'
end

program Xeq
    di as txt
    di as txt `"-> "' as res `"`0'"'
    `0'
end