program def regplot7, sort 
*! renamed 11 February 2003 
*! 1.2.0 NJC 19 Sept 2001 
	version 7.0
	syntax [varlist(max=1 numeric default=none ts)] /* 
	*/ [ , Connect(str) L1title(str) Symbol(str) XLAbel XLAbel(str) /* 
	*/ YLAbel YLabel(str) SOrt TItle(str) BY(varname) * /* 
	*/ SEParate(varname) ]

	* initial checking and picking up what -regress- type command 
	* leaves behind

	if "`e(cmd)'" == "anova" { 
		di as err "regplot not allowed after anova" 
		di as txt "recommendation: try " as inp "anovaplot" 
		exit 498 
	}
	
	if "`e(depvar)'" == "" { 
		di as err "estimates not found" 
		exit 301 
	} 

	local ndepvar : word count `e(depvar)' 
	if `ndepvar' > 1 { 
		di as err "regplot not allowed after `e(cmd)'" 
		exit 498 
	} 	

	if "`varlist'" == "" { 
		tempname b 
		mat `b' = e(b) 
		local x : colnames `b' 
		local x : word 1 of `x' 
	} 
	else local x "`varlist'" 

	local y "`e(depvar)'" 

	if "`separate'" != "" {
		qui tab `separate' if e(sample) 
		if r(r) > 19 { 
			di as error "too many groups in `separate': maximum 19" 
			exit 198 
		}
		local nlines = r(r) 
	}	
	else local nlines = 1 

	* get fit 
        tempvar fit
	qui predict `fit' if e(sample) 

	* this depends on Stata 7 dropping variables with a tempname as stub 
	if "`separate'" != "" { 
		tempname sep 
		qui separate `fit', by(`separate') gen(`sep')
	        unab fits : `sep'* 
		
		* fix variable labels 
		foreach v of varlist `fits' { 
			local label : variable label `v'
			local pos = index(`"`label'"',",") 
			local label = substr(`"`label'"',`pos' + 2,.)
			label variable `v' `"`label'"' 
		} 
	} 
	else local fits "`fit'"

	* set up graph defaults 
	if "`connect'" == "" {
		local c : di _dup(`nlines') "s" 
		local connect ".`c'" 
	}
	
	if "`symbol'" == "" { 
		local nfits : word count `fits' 
		local invis : di _dup(`nfits') "i" 
		if "`separate'" != "" { 
			local symbol "[`separate']`invis'" 
		} 	
		else local symbol "O`invis'" 
	}
	
	if `"`l1title'"' == "" { 
		* strip any time series operators
		tsrevar `y', list 
		local y2 "`r(varlist)'" 
		
		* identify the operator 
		if "`y2'" != "`y'" { 
			local op = substr("`y'",1,index("`y'","`y2'")-1)
		}
		
		local what : variable label `y2'

		* put any operator back again 
		if `"`what'"' == "" { local what "`y'" } 
		else local what "`op'`what'"  
		
		if substr("`symbol'",1,1) == "i" { 
			local l1title "fit for `what'" 
		}
		else local l1title "data and fit for `what'" 
	} 
	
	if "`ylabel'" == "" { local yl "ylabel" } 
	else if "`ylabel'" != "ylabel" { local yl "yla(`ylabel')" }
	
	if "`xlabel'" == "" { local xl "xlabel" } 
	else if "`xlabel'" != "xlabel" { local xl "xla(`xlabel')" } 

	if "`by'" != "" { 
		local byby "by(`by')" 
		sort `by'  
	} 

	if "`title'" == "" { local title " " } 
	
	* graph
	gra `y' `fits' `x' if e(sample), co(`connect') l1(`"`l1title'"') /* 
	*/ ti(`"`title'"') sort `xl' `yl' s(`symbol') `byby' `options'  
end