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

📄 statsby.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
📖 第 1 页 / 共 2 页
字号:
	// save labels for the generated vars
	forval i = 1/`K' {
		local name : word `i' of `names'
		local label = substr(`"`exp`i''"',1,80)
		label variable `name' `"`label'"'
	}
	label data `"statsby: `cmdname'"'
	if `"`filetmp'"' == "" {
		quietly save `"`saving'"', replace
	}
	else {
		// make c(changed) != 0
		tempname changed
		unab vlist : *
		gettoken n1 vlist : vlist
		while substr("`n1'",1,1) == "_" {
			gettoken n1 vlist : vlist
		}
		if "`n1'" != "" {
			if substr("`:type `n1''",1,3) == "str" {
				local changed = `n1'[1]
				quietly replace `n1' ///
					= cond(mi("`changed'"),"junk","") in 1
				quietly replace `n1' = "`changed'" in 1
			}
			else {
				scalar `changed' = `n1'[1]
				quietly replace `n1' ///
					= cond(missing(`changed'),0,.) in 1
				quietly replace `n1' = `changed' in 1
			}
		}
		else {
			// all the variable start with "_"
			quietly generate changed = . in 1
			drop changed
		}
	}
	global S_FN
	global S_FNDATE
	return local by `by'
end

program PostGroups, rclass
	version 8, missing
	local version : di "version " string(_caller()) ", missing:"

	// parse
	syntax varlist(max=1) =exp,		/// tousevar = # of exps
		cmd(string asis)		///
		command1(string asis)		///
		postname(string)		///
		[				///
			command2(string asis)	///
			by(varlist)		///
			by0(varlist)		///
			count(integer 0)	///
			dots(string)		///
			NOIsily			///
			TRace			///
			subset			///
			total			///
			express(string asis)	///
			inable			///
		]
	local touse `varlist'

	if `"`command2'"' != "" {
		local command2 `", `command2'"'
	}
	// get expressions
	local K `exp'
	confirm integer number `K'
	forval i = 1/`K' {
		gettoken stuff express : express , match(parens)
		local exp`i' `stuff'
	}
	if `"`subset'"' == "" {
		local subset group
	}

	// by varlist with individual parens: for -post-
	tempname byobs
	scalar `byobs' = 1
	foreach name of local by {
		local misby `misby' (.)
		local pby `pby' (`name'[`byobs'])
	}
	if "`trace'" != "" {
		local noisily noisily
		local traceon	set trace on
		local traceoff	set trace off
	}
	local noi = cond("`noisily'"=="", "*", "noi")
	forval i = 1/`K' {
		tempname x`i'
		local misexps `misexps' (.)
		local pexps `pexps' (`x`i'')
	}
	if `"`by'"' == "" | `"`by0'"' == "" {
		local count = `count' + 1
		// run command and post results
		`noi' di as txt _n ///
"running (" as inp `"`cmd'"' as txt ") on `subset' `count'" _n
		`noi' di as inp ". `cmd'"
		`traceon'
		capture `noisily' `version' `cmd'
		`traceoff'
		if (c(rc) == 1)	error 1
		`dots' `count' `c(rc)'
		if c(rc) {
			`noi' di in smcl as err ///
`"{p 0 0 2}captured error running (`cmd'), posting missing values{p_end}"'
			post `postname' `pby' `misexps'
		}
		else {
			forval i = 1/`K' {
				capture scalar `x`i'' = `exp`i''
				if (c(rc) == 1)	error 1
				if c(rc) {
					if c(rc) == 1 {
						error 1
					}
					`noi' di in smcl as error ///
`"{p 0 0 2}captured error in `exp`i'', posting missing value{p_end}"'
					scalar `x`i'' = .
				}
			}
			post `postname' `pby' `pexps'
		}
	}
	else {
	 	if "`total'" != "" {
			`traceon'
			capture `cmd'
			`traceoff'
			if (c(rc) == 1)	error 1
			if c(rc) {
				`noi' di in smcl as err ///
`"{p 0 0 2}captured error running (`cmd'), posting missing values{p_end}"'
				post `postname' `pby' `misexps'
			}
			else {
				forval i = 1/`K' {
					capture scalar `x`i'' = `exp`i''
					if (c(rc) == 1)	error 1
					if c(rc) {
						`noi' di in smcl as error ///
`"{p 0 0 2}captured error in `exp`i'', posting missing value{p_end}"'
						scalar `x`i'' = .
					}
				}
				post `postname' `misby' `pexps'
			}
		}

						// groups
		local sortvars : sortedby
		if "`inable'" == "" {
			local fast 0
		}
		else {
			capture tsset
			if c(rc) {
				local fast 1
			}
			else {
				local fast 0
			}
		}

		// begin code split for tsset data
		if !(`fast') {			// data is tsset
			sort `touse' `by0'
			tempvar group
			by `touse' `by0' : gen `group' = (_n==1)
			quietly replace `group' = sum(`group')
			quietly replace `group' = . if missing(`touse')
			summ `group', mean
			local ngrp = r(max)
			if `"`sortvars'"' != "" {
				sort `sortvars'
			}
			tempvar id
			quietly gen `id' = _n
			forvalues i = 1/`ngrp' {
				local count = `count' + 1
				sum `id' if `group'==`i', mean
				scalar `byobs' = r(min)
				`noi' di as txt _n ///
"running (" as inp `"`cmd'"' as txt ") on `subset' `count'" _n
				`noi' di as inp ". `cmd'"
				`traceon'
				capture `noisily' `command1'		 ///
				 	if `touse' == 1 & `group' == `i' ///
					`command2'

				`traceoff'
				if (c(rc) == 1)	error 1
				local bad = c(rc) != 0
				if c(rc) {
					`noi' di in smcl as err ///
`"{p 0 0 2}captured error running (`cmd'), posting missing values{p_end}"'
					post `postname' `pby' `misexps'
				}
				else {
					forval i = 1/`K' {
						capture scalar `x`i'' = `exp`i''
						if (c(rc) == 1) error 1
						if c(rc) {
							local bad 1
						`noi' di in smcl as error ///
`"{p 0 0 2}captured error in `exp`i'', posting missing value{p_end}"'
							scalar `x`i'' = .
						}
					}
					post `postname' `pby' `pexps'
				}
				`dots' `count' `bad'
			}
		}
		else {	// data is not tsset (`fast' == 1)
			sort `touse' `by0' `sortvars'
			local sortvarsbase: sortedby
			tempvar grpcnt
			quietly bys `touse' `by0' ///
				: gen `grpcnt' = _N if `touse'==1
			quietly count if `touse'==1
			local usecnt=r(N)
			local j=1
			while `j'<=`usecnt' {
				local sortvarsnow : sortedby
				local samesort ///
					: list sortvarsnow == sortvarsbase
				if !`samesort' sort `sortvarsbase'
				local end=`j'+`grpcnt'[`j']-1
				local count = `count' + 1
				scalar `byobs' = `j'
				`noi' di as txt _n ///
"running (" as inp `"`cmd'"' as txt ") on `subset' `count'" _n
				`noi' di as inp ". `cmd'"
				`traceon'
				capture `noisily' `command1'		///
				 	in `j'/`end' `command2'
				`traceoff'
				if (c(rc) == 1)	error 1
				local bad = c(rc) != 0
				if c(rc) {
					`noi' di in smcl as err ///
`"{p 0 0 2}captured error running (`cmd'), posting missing values{p_end}"'
					post `postname' `pby' `misexps'
				}
				else {
					forval i = 1/`K' {
						capture scalar ///
							`x`i'' = `exp`i''
						if (c(rc) == 1) error 1
						if c(rc) {
							local bad 1
						`noi' di in smcl as error ///
`"{p 0 0 2}captured error in `exp`i'', posting missing value{p_end}"'
							scalar `x`i'' = .
						}
					}
					post `postname' `pby' `pexps'
				}
			local j=`end'+1
				`dots' `count' `bad'
			}
		} // end of code split for tsset data
	}
	return scalar N_groups = `count'
end

program SubSets, rclass
	version 8, missing
	local version : di "version " string(_caller()) ", missing:"

	// parse
	syntax varlist(max=1) =exp,		/// tousevar = # of exps
		[				///
			by(varlist)		///
			express(passthru)	///
			*			///
		]

	local bynum : word count `by'
	tempname M
	GetMat `bynum' `M'
	local rnum = 2^`bynum'
	local count = 0
	forval i = 1/`rnum' {
		tokenize `by'
		preserve
		local by0
		forval j = 1/`bynum' {
			if `M'[`i',`j'] {
				local by0  `by0' ``j''
			}
			else quietly replace ``j'' = .
		}
		`version' PostGroups `varlist' `exp',	///
			by(`by')			///
			by0(`by0')			///
			count(`count')			///
			subset				///
			`express'			///
			`options'
		local count = r(N_groups)
		restore
	}
	return scalar N_subsets = `count'
end

// The following generates a matrix of 0's and 1's, each row determining a
// unique subset among all possible subsets.
program GetMat
	args bynum	M
	local rnum = 2^`bynum'
	mat `M' = J(`rnum', `bynum',0)
	local i 0
	while `i' <= `rnum'-1 {
		local j = `bynum'
		local a `i'
		while `j' > = 1 {
			if `a' == 0 {
				local j = 0
			}
			else {
				local b  mod(`a', 2)
				local a  int(`a'/2)
				mat `M'[`i'+1,`j'] = `b'
				local j = `j' - 1
			}
		}
		local i = `i' + 1
	}
end
exit

⌨️ 快捷键说明

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