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

📄 xtabond.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
📖 第 1 页 / 共 3 页
字号:
*! version 3.6.3  07apr2005
program define xtabond, sortpreserve byable(onecall)
	quietly query born
	if $S_1 < d(23may2002) {
		di as err "your Stata executable is out of date"
		di as err "    type -update executable- at the Stata prompt"
		exit 498
	}

	if _by() {
		local BY `"by `_byvars'`_byrc0':"'
	}
	`BY' _vce_parserun xtabond, nojack noboot : `0'
	if "`s(exit)'" != "" {
		exit
	}
	version 7.0, missing

	if replay() {
		if "`e(cmd)'" != "xtabond" { error 301 } 
		if _by() { error 190 }
		syntax [, Level(cilevel) ]
		Disp `level'
		exit
	}	
	`BY' Estimate `0'
end

program Estimate, sortpreserve eclass byable(recall)
	syntax varlist(ts) [if] [in] , [LAgs(integer 1) Robust TWOstep /* 
		*/ noConstant ARtests(integer 2) /*
		*/ MAXLDep(integer 0) DIFFvars(string) INST(string) /* 
		*/ MAXLAGs(string ) zout(integer 0) SMall /*
		*/ Level(cilevel) * ]
		

	if "`twostep'" != "" & "`robust'" != "" {
		di as err "robust may not be specified with twostep"
		exit 198
	}

/* check that data is tsset */

	capture tsset
	

	local tmin = r(tmin)
	local tmax = r(tmax)

	capture local id "`r(panelvar)'"
	if "`id'"=="" {
		di as err "must tsset data and specify panelvar"
		exit 459
	}
	capture local t "`r(timevar)'"
	if "`t'" == "" {
		di as err "must tsset data and specify timevar"
		exit 459
	}

	local tvar  `t'


	if `lags' > `tmax'-`tmin'-1 {
		di as error /*
			*/ "too many lags of the dependent variable requested"
		di as error "lags() must be between 1 and " `tmax'-`tmin'-2	
		exit 198
	}	
/* complain if number of lags is < 0 */
	if `lags'<1 {
		di as err "lags of dependent variable must be >=1 "
		exit 198
	}	

/* only p+1 ar tests can be performed */	
	if `artests' > `lags' + 1 {
 	      di as err "Only the number of lags on depvar +1 AR tests allowed"
		exit 198
	}	

	if "`maxlags'" != "" {
		capture local check = (`maxlags' <= 0 )
		if _rc > 0 { 
			di as err "maxlags(`maxlags') not valid"
			exit 198
		}	
		if `maxlags'<=0 {
			di as err "maxlags must be > 0"
			exit 198
		}
	}
	else {
		local maxlags = `tmax' -`tmin'
	}	

	
	tempvar touse touseb
	mark `touse' `if' `in'
	markout `touse' `id' 

	if _by() {
		qui replace `touse' = 0 if `_byindex' != _byindex()
	}

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

	qui gen byte `touseb' = `touse'

	preserve
	tempvar orig
	qui gen byte `orig' =1
	tsfill, full


	sort `id' `t'
	qui replace `orig' =0 if `orig' >=.

	qui count if `t'>=.
	if r(N)>0 {
		di as err "no missing values in time variable (`t') allowed"
		exit 459
	}	

/* parse diffvars */
	if "`diffvars'" != "" {
		tsvars `diffvars'
		local diffvars "`r(varlist)'"
		_rmcoll `diffvars', `constant'
		local diffvars "`r(varlist)'"
		
	}	

/* parse instruments */
	if "`inst'" != "" {
		_rmcoll `inst', `constant'
		local inst "`r(varlist)'"
		local inst_o "`r(varlist)'"
		
/* inst_l is local list of instruments */

		local inst_l "`inst'"
		tsrevar `inst', substitute
		local inst "`r(varlist)'"
	}	


	if "`constant'" == "" {
		tempname cons1
		qui gen double `cons1'=1 if `touse'
	}

	local varlist "`varlist' "
	tokenize `varlist'
	local depvar `1'
	local depvar: subinstr local depvar "." ".", count(local legal)
	if `legal' > 0 {
		di as err "`depvar' invalid in this context"
		di as err /*
		*/"dependent variable may not contain time-series operators"
		exit 198
	}	
	macro shift 
	local indeps "`*'"
	local exog `indeps' 

	_rmcoll `exog', `constant'
	local exog "`r(varlist)'"

	
	if `lags' > 0 {
		tsvars L(1(1)`lags').`depvar' 
		local laglist "`r(varlist)'"
	}
	else {
		local laglist
	}	
/* parse out predetermined variables and their lag structures */

/* preM2 is a global name of matrix that holds the parameters for the 
	predetermined variable the structure of preM2 is 
		lags of variable in model, 
		maximum number of lags that can be used as instrument */

	tempname preM2 preM2b

// prelist contains [{pre_el} [{pre_el}]..[{pre_el}]}
// where pre_el is {varname} {rlags} {rmlags} {firstpl}
//  rlags is the number of lags of the predetermined 
//        variable in the model 
//  rmlags is the number of lags that can be used as instruments for the
//        the predetermined variables
//  firstpl is the minimum lag that can be included in as instrument minus 1, 
//        i.e.,  firstpl = first + rlags, 
//    		where first=0 if predetermined and first=1 if endogenous
	
	while "`options'" != "" {
		local 0 ",`options'"
		syntax [, PRE(string) * ]
		if "`pre'" == "" {
			di as err " `options' invalid"
			exit 198
		}	

		local tmp : subinstr local pre "," ",", all 	/*
			*/ count(local ncommas)	

		if `ncommas' == 0 {
			local mycomma ","
		}
		else {
			local mycomma 
		}

		pre_p `pre' `mycomma' exog(`exog' `diffvars')	/*
			*/ prevs(`prevs') `constant'

		local rprelist "`r(pre)'"

		if "`rprelist'" != "" {
			local prevs "`prevs' `rprelist'"
		
			local firstpl = r(first)			
		
			if r(lags)>=.	{
				local rlags 0
			}	
			else {
				local rlags = r(lags)
			}
		
			if r(maxlags)>=.  {
				local rmlags =  `maxlags' 
			}	
			else {
				local rmlags = r(maxlags) 
			}	

			if `rlags' < 0 {
di as err "Lags of predetermined variables must be >= 0"
exit 198 
			}	
			if `rmlags' < 1 {
				di as err "Max number of instruments for "/*
			 	    */ "predetermined variables must be >= 1 "
				exit 198
			}	
		
			local prelist "`prelist'`rprelist',"	
			local prelist "`prelist' `rlags' `rmlags' `firstpl':"

			local pres `rprelist'
			foreach pv of local pres {
				mat `preM2' = nullmat(`preM2') \ 	/*
					*/ (`rlags' , `rmlags' ) 
				mat `preM2b' = nullmat(`preM2b') \ /*
					*/ (`rlags' , `rmlags', `firstpl' ) 

			}
		}	
	}	

	if `lags' == 0 & "`prelist'" == "" {
		di as err "no lags of the dependent variable or " /*
			*/ "predetermined variables specified"
		exit 198	
	}

	if "`options'" != "" {
		di as err "`options' invalid"
		exit 198
	}	

	if "`prevs'" != "" {
		local pre ""
		local j 1
		tokenize `prevs'
		while "``j''" != "" {
			local vlag=`preM2'[`j',1]
			local pre "`pre' L(0(1)`vlag').``j'' "
			local j = `j' + 1
		}	
	
		tsvars `pre'
		local pre "`r(varlist)'"
	}
	else {
		local pre ""
		local preM2 ""
	}	


/* check for collinearity */

/* t2 contains `absolute t' which goes from 1 to number of observations in
 *    longest panel
 */

	tempvar t2 
	qui gen long `t2'=`tvar'-`tmin'+1 
	qui sum `t2'
	local t2max = r(max)

/* t2min contains first value of absolute t in model */ 	
	local t2min = 1 + `lags' + 1

	local trows = `t2max' - (`lags'+1)

	local fvarlist " `laglist' `indeps' "

	if "`constant'"=="" {
		_rmcoll `fvarlist' `diffvars' `pre'  /* 
	 		*/ if `touse' & `t2'>`lags'+1	
	}
	else {
		_rmcoll `fvarlist' `diffvars' `pre'  /* 
		 	*/ if `touse' & `t2'>`lags'+1 , nocons
	}		
	local fvarlist "`r(varlist)'"


	foreach tv of local fvarlist {
		local laglist: subinstr local laglist "`tv'" "`tv'", /*
			*/ word count(local n)
		if `n'==1 {
			local newlaglist "`newlaglist' `tv' "
		}
		
		local n 0
		local indeps: subinstr local indeps "`tv'" "`tv'", /*
			*/ word count(local n)
		if `n'==1 {
			local newindeps "`newindeps' `tv' "
		}

		local n 0
		local diffvars: subinstr local diffvars "`tv'" "`tv'", /*
			*/ word count(local n)
		if `n'==1 {
			local newdiffs "`newdiffs' `tv' "
		}

		local n 0
		local exog: subinstr local exog "`tv'" "`tv'", /*
			*/ word count(local n)
		if `n'==1 {
			local newexog "`newexog' `tv' "
		}

		local n 0
		local pre: subinstr local pre "`tv'" "`tv'", /*
			*/ word count(local n)
		if `n'==1 {
			local newpre "`newpre' `tv' "
		}
	
	}	

	local laglist "`newlaglist'"
	local laglist_n "`laglist'"

	if `lags' > 0 {
		qui tsrevar `laglist' if `touse', substitute
		local laglist "`r(varlist)'"
	}
	else {
		local laglist ""
	}	

	local indeps "`newindeps'"
	local diffvars "`newdiffs'"
	local pre "`newpre'"

	local exog `newexog' `newdiffs'

/* now use time-series operators to difference indeps and laglist */

	tokenize `laglist'
	while "`1'" != "" {
		local 1 "D.`1'"
		local laglist2 "`laglist2' `1'" 
		macro shift
	}
	local laglist "`laglist2'"

	local laglist_ud "`laglist_n'"
	tokenize `laglist_n'
	while "`1'" != "" {
		local 1 "D.`1'"
		local laglist_n2 "`laglist_n2' `1'" 
		macro shift
	}
	local laglist_n "`laglist_n2'"
	
	local indeps_ud "`indeps' `diffvars' "
	tokenize `indeps'
	while "`1'" != "" {
		local 1 "D.`1'"
		local indeps2 "`indeps2' `1'" 
		macro shift
	}
	local indeps "`indeps2'"


/* now put diffvars into indeps */	
	local indeps "`indeps' `diffvars' "

	local indeps_o `indeps'

	qui tsrevar `pre' if `touse', list
	local prebase "`r(varlist)'"

/* create differenced names for pre */

	local pre_ud "`pre'"
	tokenize `pre'
	while "`1'" != "" {
		local 1 "D.`1'"
		local pre2 "`pre2' `1'" 
		macro shift
	}
	local pre_n "`pre2'"

	local prevars_o `pre'
	qui tsrevar `pre' if `touse',substitute 
	local prevars "`r(varlist)'"

	tokenize `prebase'
	local j 1
	while "``j''" != "" {
		tempname pre`j'
		qui gen double `pre`j''=``j''
		local prebase2 " `prebase2' `pre`j'' "

		local j = `j' + 1
	}	

	local prebase "`prebase2'"

/* difference prevars */
	tokenize `prevars'
	while "`1'" != "" {
		local 1 "D.`1'"
		local prevars2 "`prevars2' `1'" 
		macro shift
	}
	local prevars "`prevars2'"

/* put in cons */


	if "`constant'" == "" {
		local names_ud "`laglist_ud' `pre_ud' `indeps_ud' _cons "
		local namesf "`laglist_n' `pre_n' `indeps' _cons "
		local indeps "`indeps' `cons1'"
		local fvarlist "`depvar' `laglist' `prevars' `indeps' " 
		local exog `exog' `cons1'
	}
	else {
		local names_ud "`laglist_ud' `pre_ud' `indeps_ud' "
		local fvarlist "`depvar' `laglist' `prevars' `indeps' " 
		local namesf "`laglist_n' `pre_n' `indeps' "
	}

	local names_ud : subinstr local names_ud "  " " ", all
	local names_ud : subinstr local names_ud "  " " ", all

⌨️ 快捷键说明

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