*! NJC 1.0.2 30 October 2002
*! NJC 1.0.1 26 October 2002
*! NJC 1.0.0 26 October 2002
program def vectorof
	version 7
	gettoken cmd 0 : 0
	syntax [varlist] [if] [in] [aweight fweight iweight pweight] /*
	*/ [ , * Eclass(str) Rclass(str) Global(str) MATname(str) LISTWISE /*
	*/ SAving(str asis) margin(str) TItle(str asis) /*
	*/ x(varlist) y(varlist) /*
	*/ noBlank noHAlf noHeader noNames Format(str) ]

	local nopts = /*
	*/ ("`eclass'" != "") + ("`rclass'" != "") + ("`global'" != "")
	if `nopts' >= 2 {
		di as err "must specify one of eclass(), rclass() or global()"
		exit 198
	}
	else if `nopts' == 0 {
		local graph "graph"
	}

	if "`graph'" != "" {
		if "`matname'" != "" {
			di as err "matname() incompatible with graph"
			exit 198
		}
	}
	else {
		local nargs : word count `eclass' `rclass' `global'
		if `nargs' != 1 {
			foreach o in eclass rclass global {
				if "``o''" != "" {
					local which "`o'"
				}
			}
			di as err "specify one result in `which'()"
			exit 198
		}
	}

	if "`listwise'" != "" {
		marksample touse, novarlist
	}
	else {
		marksample touse
		if "`x'`y'" != "" {
			markout `touse' `x' `y'
		}
	}

	qui count if `touse'
	if r(N) == 0 {
		di as err "no observations"
		exit 2000
	}

	if "`graph'" != "" {
		local onoff : set graphics
		if `"`title'"' != "" {
			local t "title(`"`title'"')"
		}

		noisily capture {
			set graphics off

			foreach v of local varlist {
				tempfile g
				`cmd' `y' `v' `x' [`weight' `exp'] /*
				*/ if `touse', `options' saving(`"`g'"')
				local G `"`G' "`g'""'
			}
			set graphics on

			if "`margin'" != "" {
				local m "margin(`margin')"
			}
			if `"`saving'"' != "" {
				local s "saving(`"`saving'"')"
			}
			gra using `G', `m' `s'
		}

		local rc = max(_rc, 0)

		if "`onoff'" == "on" {
			set graphics on
		}
		else set graphics off

		if `rc' {
			error `rc'
		}
	}
	else {
		local nv : word count `varlist'
		if "`matname'" == "" {
			tempname matname
			local header "noheader"
		}

		mat `matname' = J(`nv',1,1e309)
		if `"`options'"' != ""	{
			local options `", `options'"'
		}
		local nv : word count `varlist'
		tokenize `varlist'

		if "`global'" != "" {
			forval i = 1 / `nv' {
				qui `cmd' `x' ``i''  `y' [`weight' `exp'] /*
				*/ if `touse' `options'
				capture mat `matname'[`i',1] = $`global'
			}
		}
		else {
			local t = cond("`eclass'" != "", "e", "r")
			forval i = 1 / `nv' {
				qui `cmd' `x' ``i''  `y' [`weight' `exp'] /*
				*/ if `touse' `options'
				capture mat `matname'[`i',1] = /*
				*/ `t'(`eclass'`rclass')
			}
		}
		mat rownames `matname' = `varlist'
		mat colnames `matname' = `eclass'`rclass'`global'
		if "`format'" != "" {
			local format "format(`format')"
		}
		if `"`title'"' != "" {
			local title `"title(`title')"'
		}

		matrix li `matname', /*
		*/ `blank' `header' `names' `half' `format' `title'
	}
end