⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _exp_list_expand.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
字号:
*! version 1.0.0  03jan2005
program _exp_list_expand, sclass
	version 9
	syntax anything(id="matnames" name=explist equalok),	///
		stub(name)					///
		[						///
			eqstub(name)				///
			EEXP(string)				///
			COLNames(string)			///
			COLEq(string)				///
			NORUN					///
		]

	if "`eqstub'" == "" {
		local eqstub _eq
	}

	// NOTE: do not call any -sclass- commands from here on
	sreturn clear

	gettoken evalues explist : explist
	gettoken values explist : explist
	capture {
		confirm name `evalues'
		confirm name `values'
	}
	if c(rc) {
		di as err "matnames required"
		exit 100
	}
	capture matrix drop `evalues'
	capture matrix drop `values'
	// Expand <eexp> elements:
	local i 0
	local ieq 0
	local foundse 0
	if `"`eexp'"' != "" {
		if "`norun'" != "" | `"`e(b)'"' != "matrix" {
			gettoken invalid : eexp, parse(" ()") bind match(par)
			di as err "invalid expression: `invalid'"
			exit 198
		}
		tempname b mat
		matrix `b' = e(b)
		local b_coleq : coleq `b', quote
		local b_coleq : list clean b_coleq
		local b_coleq : list uniq b_coleq
		while `"`eexp'"' != "" {
			gettoken tok rest : eexp, parse("()") bind match(par)
			gettoken tok eq : tok
			local eq : list retok eq
			if `"`eq'"' != "" {
				// get eqname from "#eqno" specification
				if substr(`"`eq'"',1,1) == "#" {
					local eqn = substr(`"`eq'"',2,.)
					capture confirm integer number `eqn'
					if c(rc) {
						di as err	///
						`"equation `eq' not found"'
						exit 111
					}
					// check that `eq' is valid
					if `eqn' > `:word count `b_coleq'' {
						di as err	///
						`"equation `eq' not found"'
						exit 111
					}
					local eq : word `eqn' of `b_coleq'
				}
				else if !`:list eq in b_coleq' {
					di as err	///
					`"equation `eq' not found"'
					exit 111
				}
				if `"`eq'"' == `"`b_coleq'"' {
					local eq
				}
			}
			if inlist(`"`tok'"',"_b","_se") {
				gettoken tok2 rest2 : rest, parse("[]") bind
				if `"`tok2'"' == "[]" {
					local eexp `"`rest2'"'
				}
				else	local eexp `"`rest'"'
			}
			else {
				di as err `"invalid eexp: `tok'"'
				exit 198
			}
			if "`eq'" != "" {
				matrix `mat' = `b'[1,"`eq':"]
			}
			else	matrix `mat' = `b'
			local mcoleq : cole `mat', quote
			local mcoleq : list clean mcoleq
			local mcolna : coln `mat'
			local senames

			if "`eq'" != "" {
				local eq " `eq'"
			}
			local ueexp `ueexp' (`tok'`eq')

			forval j = 1/`=colsof(`mat')' {
				local ++i	// index for all expressions
				// it's now ok to replace `eq'
				gettoken eq mcoleq : mcoleq, qed(qed)
				gettoken na mcolna : mcolna
				if "`eq'" != "`oldeq'" {
					local ++ieq
					local oldeq `eq'
				}
				if "`eq'" == "_" {
					local exp `tok'[`na']
					local eq
				}
				else {
					if `qed' {
						local exp ["`eq'"]`tok'[`na']
					}
					else {
						local exp [`eq']`tok'[`na']
					}
				}
				sreturn local exp`i' `"`exp'"'
				local list `list' (`exp')
				if substr("`na'",1,1) != "_" {
					local na _`na'
				}
				if "`tok'" == "_se" {
					local foundse 1
					if "`eq'" == "" {
						local senames `senames' se
					}
					else	local senames `senames' `eq'_se
					matrix `mat'[1,`j'] = `exp'
				}
				// generate a varname for current expression
				if "`eq'" != "" {
					capture {
						confirm name `eq'
						assert 1 == `:word count `eq''
					}
					if c(rc) {
						local eq `eqstub'`ieq'
					}
				}
				local id `eq'`tok'`na'
				if `:length local id' > `c(namelen)' {
					local abeq = substr("`eq'",1,12)
					local abna = substr("`na'",1,12)
					local id `abeq'`tok'`abna'
				}
				if `: list id in names' {
					local id `id'`i'
				}
				capture confirm name `id'
				if c(rc) {
					local id `stub'`i'
				}
				local enames `enames' `id'
			}
			if "`tok'" == "_se" {
				matrix cole `mat' = `senames'
			}
			matrix `evalues' = nullmat(`evalues'), `mat'
		}
		if `foundse' {
			local ecoleq : coleq `evalues', quote
			local under _
			if `:list under in ecoleq' {
				foreach eq of local ecoleq {
					if "`eq'" == "_" {
						local eq b
					}
					local neweqs `neweqs' `eq'
				}
				matrix coleq `evalues' = `neweqs'
			}
		}
		if "`explist'" != "" {
			local ecoleq : coleq `evalues'
			if "`:list uniq ecoleq'" == "_" {
				// make sure there is at least one equation
				// name in `evalues' generated from `eexp'
				matrix coleq `evalues' = `eqstub'1
				local ieq 1
			}
		}
	}

	// Add expressions:
	// NOTE: no need to worry about equations with spaces in them,
	// -_exp_list_parse- didn't allow them.
	if `"`explist'"' != "" {
		local j 0
		tempname val v_explist
		local oldeq
		while `"`explist'"' != "" {
			local ++j	// index for <elist> expression
			local ++i	// index for all expressions

			// generate a varname for current expression
			local eq : word `j' of `coleq'
			local na : word `j' of `colnames'
			if "`eq'" != "`oldeq'" {
				local ++ieq
				local oldeq `eq'
			}
			if "`eq'" == "`eqstub'" {
				local eq `eqstub'`ieq'
			}
			local coleq2 `coleq2' `eq'
			if "`eq'" != "" & substr("`na'",1,1) != "_" {
				local na _`na'
			}
			local id `eq'`na'
			if `:length local id' > `c(namelen)' {
				local abeq = substr("`eq'",1,12)
				local abna = substr("`na'",1,12)
				local id `abeq'`abna'
			}
			if `: list id in names' {
				local id `id'`i'
			}
			capture confirm name `id'
			if c(rc) {
				local id `stub'`i'
			}

			local names `names' `id'
			gettoken exp explist : explist,	///
				parse(" ()") bind match(par)
			scalar `val' = `exp'
			matrix `v_explist' = nullmat(`v_explist'), `val'
			sreturn local exp`i' `"`exp'"'
			local list `list' (`exp')
		}
		matrix colnames	`v_explist' = `colnames'
		matrix coleq	`v_explist' = `coleq2'
		matrix `values' = nullmat(`values'), `v_explist'
	}
	local both 0
	capture confirm matrix `evalues'
	if !c(rc) {
		matrix rowname `evalues' = y1
		local ++both
	}
	capture confirm matrix `values'
	if !c(rc) {
		matrix rowname `values' = y1
		local ++both
	}
	sreturn local n_exp `i'
	sreturn local enames `enames'
	sreturn local names `names'
	sreturn local explist `"`list'"'
	sreturn local eexp `"`ueexp'"'
end
exit

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -