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

📄 drawnorm.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
字号:
*! version 7.1.1  13dec2003
program define drawnorm
	version 8.2

	gettoken first 0: 0, parse(",")
	#del;
	syntax [,
		n(string)
		SEED(string)
		Double
		CORR(string)
		COV(string)
		CStorage(string)
		Means(string)
		SDs(string)
		CLEAR
	] ;
	#del cr

	quietly count
	local curn = r(N)
	if `"`n'"' != "" {
		confirm integer n `n'
		if `n' == `curn' {
			local n
		}
	}
	if `"`n'"' == "" {	/* add newvarlist to existing dataset */
		local nobs = r(N)
		if `nobs' <= 0 {
			error 2000
		}
		if "`clear'" != "" {
			drop _all
			qui set obs `nobs'
			local n `nobs'
		}
	}
	else {			/* generate new dataset */
		if `n' <= 0 {
			error 2000
		}
		qui count
		if `n' != r(N) {
			qui des, short
			if r(changed) & ("`clear'" == "" ) {
				error 4
			}
			drop _all
		}
		local nobs = `n'
		qui set obs `nobs'
	}

	local 0 "`first'"
	syntax newvarlist
	local k : word count `varlist'

	if "`seed'" != "" {
		set seed `seed'
	}

	tempname P
	mat `P' = I(`k')
							/* C = corr */
	if `"`corr'"' != "" {
		tempname C
		_m2matrix `C' corr `k' "`corr'" "`cstorage'"
		mat `P' = `C'
		mat `P' = cholesky(`P')
	}
							/* V = cov */
	if "`cov'" != "" {
		if "`corr'" != "" {
			dis as err "cov() and corr() may not be specified together"
			exit 198
		}
		tempname V S
		_m2matrix `V' cov  `k' "`cov'"  "`cstorage'"
		mat `S' = vecdiag(cholesky(`V'))
		mat `P' = `V'
		mat `P' = cholesky(`P')
	}
							/* M = means */
	tempname M
	if "`means'" != "" {
		_m2matrix `M' means `k' "`means'"
	}
	else {
		mat `M' = J(1,`k', 0)
	}
							/* S = stds */
	tempname S
	if `"`sds'"' != "" {
		if `"`cov'"' != "" {
			dis as err "cov() and sds() may not be specified together"
			exit 198
		}
		_m2matrix `S' sds `k' "`sds'"
	}
	else {
		mat `S' = J(1,`k',1)
	}

						/* generate new variables */
	tokenize `varlist'
	local newlist `varlist'
	foreach var of local newlist {
		qui gen `double' `var' = invnorm(uniform())
	}
					/* transform to desired corr */
	mat roweq `P' = " "
	mat coleq `P' = " "	/* remove possible equation names from P */
	mat rownames `P' = `varlist'
	mat colnames `P' = `varlist'
	forvalues i = 1 / `k' {
		tempname new`i' row
		mat `row' = `P'[`i', 1...]
		mat score `new`i'' = `row'
	}

	tokenize `varlist'
	forvalues i = 1 / `k' {
		qui replace ``i'' = `new`i''
	}

					/* transform to desired means and std */
	if "`cov'" != "" | "`sds'" != "" {
		forvalues i = 1 / `k' {
			qui replace ``i'' = ``i'' * `S'[1,`i']
		}
	}
	if "`means'" != "" {
		tokenize `varlist'
		forvalues i = 1 / `k'  {
			qui replace ``i'' = ``i'' + `M'[1,`i']
		}
	}
	if "`n'" != "" {
		dis as txt "(obs `nobs')"
	}
end

⌨️ 快捷键说明

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