*! version 1.0.0 MLB 22May2009
program define mfxrcspline_ex
	Msg preserve
	preserve

	if `1' == 1 {
		Xeq sysuse nlsw88, clear
	
		Xeq recode grade 0/5=5
		
		Xeq mkspline2 grades = grade, cubic nknots(3)
		Xeq logit never_married grades*
		
		Xeq adjustrcspline, name(__ex_adjustrcspline1)
		Xeq mfxrcspline, name(__ex_mfxrcspline1)
	}
	else if `1' == 2 {
		Xeq sysuse uslifeexp, clear
		
		Xeq mkspline2 ys = year, cubic 
		Xeq reg le ys* if year != 1918
		
		Xeq adjustrcspline if year != 1918, ///
	    	        addplot(scatter le year if year != 1918, msymbol(Oh) || ///
	    	                scatter le year if year == 1918, msymbol(X) )   ///
	    	        ytitle("life expectancy")                               ///
	    	        name(__ex_adjustrcspline2)                              /// 
		        note("1918 was excluded from the computations because of the Spanish flu")
		
		Xeq mfxrcspline if year != 1918, name(__ex_mfxrcspline2)
	}
	else if `1' == 3 {
		Xeq sysuse nlsw88, clear
		
		Xeq recode grade 0/5=5
		
		Xeq mkspline2 grades = grade, cubic nknots(3)
		Xeq logit never_married grades*

		Xeq mfxrcspline, customdydxb("invlogit(xb())*invlogit(-1*xb())")
	}
	else if `1' == 4 {
		Xeq sysuse nlsw88, clear

		Xeq recode grade 0/5=5
	
		Xeq mkspline2 grades = grade, cubic nknots(3)
		Xeq logit never_married grades*

		Xeq glm never_married grades* south, link(cloglog) family(binomial)
		Xeq mfxrcspline, at(south=0)	
	}
	else if `1' == 5 {
		Xeq sysuse cancer, clear
		Xeq gen long id = _n
		Xeq stset studytime, failure(died) id(id)
			
		Xeq stsplit t, every(1)
		
		Xeq mkspline2 ts=t, cubic nknots(3)
		Xeq xi: streg i.drug age ts*, dist(exp)
		
		if c(stata_version) >= 11 {
			Xeq mfxrcspline , at(_Idrug_2=0 _Idrug_3=0) ///
							  link("log")               ///
							  noci                      ///
							  ytitle("{&part} hazard / {&part} time")
		}
		else {
			Xeq mfxrcspline , at(_Idrug_2=0 _Idrug_3=0) ///
							  link("log")               ///
							  noci                      ///
							  ytitle("d hazard / d time")
		}
	}
	
	Msg restore 
	restore
end

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

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