fcast_graph.ado

来自「是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到」· ADO 代码 · 共 140 行

ADO
140
字号
*! version 1.0.6  02mar2005
program define fcast_graph, sort rclass
	version 8.2

	syntax varlist [if] [in] [,	///
		Differences		///
		noci			///
		CIOPts(string asis)	///
		CILines			///
		Observed		///
		OBOPts(string asis)	///
		BYOPts(string asis)	///
		*			///
	]

	if "`differences'" != "" {
		local ci noci
	}

	if "`ci'" != "" & `"`cilines'`ciopts'"' != "" {
		di as err ///
"option noci cannot be specified with options cilines or ciopts()"
		exit 198
	}
	chk_byopts, `byopts'
	local byopts `"`s(byopts)'"'

	marksample touse
	_get_gropts, graphopts(`options')
	_check4gropts ciopts, opts(`ciopts')
	_check4gropts obopts, opts(`obopts')
	if `"`obopts'"' != "" {
		local observed observed
	}
	local k_vars : word count `varlist'

	quietly tsset
	local t `r(timevar)'

	preserve

	// multiple variables
	tempname tlab
	tempvar stub group
	if "`ci'" == "" {
		if "`cilines'" == "" {
			local citype rarea
		}
		else	local citype rline
		tempvar lstub ustub
		local LEVEL : var label `: word 1 of `varlist''_LB
		gettoken LEVEL : LEVEL, parse("%")
	}
	if "`observed'" != "" {
		tempvar obstub
	}

	tempname glabel
	forval i = 1/`k_vars' {
		local var : word `i' of `varlist'
		local endog : char `var'[observed]
		if "`differences'" != "" {
			local dvar : char `var'[difference]
			if "`dvar'" == "" {
				di as err "forecasted differences not found"
				exit 498
			}
		}
		if "`endog'" == "" {
			di as err "`var' was not generated by fcast"
			exit 322
		}
		else {
			local labels `labels' `i' "Forecast for `endog'"
			if "`observed'" != "" {
				if "`differences'" != "" {
					tsunab endog2 : `endog'
					quietly gen `obstub'`i' = D.`endog2'
				}
				else {
					quietly gen `obstub'`i' = `endog'
				}	
				local yvars `yvars' `obstub'`i'
			}
		}
		if "`differences'" != "" {
			quietly gen `stub'`i' = `dvar'
		}
		else {
			quietly gen `stub'`i' = `var'
		}	
		drop `var'
		local yvars `yvars' `stub'`i'
		if "`ci'" == "" {
			local level : var label `var'_LB
			gettoken level : level, parse("%")
			if "`level'" != "`LEVEL'" {
				di as err ///
"confidence level cannot vary among the specified forecast variables"
				exit 322
			}
			quietly gen `lstub'`i' = `var'_LB
			drop `var'_LB
			quietly gen `ustub'`i' = `var'_UB
			drop `var'_UB
			local yvars `yvars' `lstub'`i' `ustub'`i'
		}
	}
	quietly keep `touse' `t' `yvars'
	quietly keep if `touse'
	quietly reshape long `obstub' `stub' `lstub' `ustub', i(`t') j(`group')
	label define `glabel' `labels'
	label values `group' `glabel'
	label var `stub' "forecast"
	if "`ci'" == "" {
		label var `lstub' "`LEVEL'% CI"
		label var `ustub' "`LEVEL'% CI"
		local ciplot ///
		(`citype' `lstub' `ustub' `t', sort pstyle(ci) `ciopts')
	}
	if "`observed'" != "" {
		label var `obstub' "observed"
		local obplot (line `obstub' `t', sort pstyle(p2line) `obopts')
	}
	local fplot ///
	(line `stub' `t', sort pstyle(p1line) xtitle("") ytitle("") `options')

	graph twoway `ciplot' `fplot' `obplot' || ///
		if `touse', by(`group', note("") `byopts')
end

program chk_byopts, sclass
	syntax [, noYRescale * ]
	if "`yrescale'" == "" {
		local yrescale yrescale
	}
	sreturn local byopts `"`yrescale' `options'"'
end
exit

⌨️ 快捷键说明

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