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

📄 tsset.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
字号:
*! version 6.3.5  26aug1999
program define tsset, rclass
	version 6

	if `"`0'"' == "" { 
		_ts tvar pvar, panel
		local fmt: format `tvar'
		tsset `pvar' `tvar', format(`fmt')
		ret add
		exit
	}

	syntax [varlist(numeric max=2 default=none)] [,	/*
			*/ CLEAR Daily Format(passthru) Generic	/*
			*/ Halfyearly  Monthly	Quarterly Weekly Yearly ]

	if "`clear'" != "" { 
		syntax [, CLEAR]
		Clear
		exit
	}

	if "`varlist'"=="" { 
		_ts tvar pvar, panel 
		tsset `pvar' `tvar', `daily' `format' /*
			*/ `generic' `halfyearly' `monthly' `quarterly' /*
			*/ `weekly' `yearly'
		ret add
		exit
	}

	syntax varlist(numeric max=2 default=none) [ ,	/*
			*/ CLEAR Daily Format(string) Generic	/*
			*/ Halfyearly  Monthly	Quarterly Weekly Yearly ]


					/* fill in format		*/
	local period `daily' `weekly' `monthly' `quarterly' /*
			*/ `halfyear' `yearly' `generic'

	if `"`format'"'!="" {
		if "`period'" != "" { 
			di in red "may not specify both format() and `period'"
			exit 198
		}
		local try : di `format' 2	/* will issue error message */
	}
	else {
		local ct : word count `period'
		if `ct' > 1 {
			di in red "may only specify one time-scale from " /*
				*/ "daily, weekly, monthly, "
			di in red "quarterly, halfyear, yearly, and generic"
			exit 198
		}
		if `ct'==1 { 
			local format = "%t" + substr("`period'",1,1) 
		}
	}
					/* end fill in format		*/


	Clear

	local ct : word count `varlist'
	if `ct'==2 { 
		tokenize `varlist'
		local panel `1'
		local timevar `2'
	}
	else	local timevar `varlist'


			/* Confirm that time variable is integer */
	capture assert int(`timevar')==`timevar'
	if _rc {
		di in red "time variable must contain only integer values"
		exit 451
	}

			/* Check that time data is valid */
	sort `panel' `timevar'
	if "`panel'" != ""   {
		local bypfx "by `panel': "
	}

	tempvar timedif
	qui `bypfx' gen long `timedif' = `timevar'[_n+1] - `timevar'
	qui sum `timedif', meanonly
	if r(min) == 0 {
		if "`panel'" != "" {
			di in red "repeated time values within panel"  
		}
		else    di in red "repeated time values in sample"  
		exit 451
	}


	nobreak { 
		if `"`format'"' != "" { 
			format `timevar' `format'
		}

		char _dta[_TStvar]   "`timevar'"
		char _dta[_TSpanel]  "`panel'"
		char _dta[_TSitrvl]  1
		char _dta[tis]   "`timevar'"
		char _dta[iis]   "`panel'"
	}
		
	/* Report the time-series information */

	Query 
	ret add
	local fmt : format `timevar'
	return local tsfmt `fmt'
	return local unit1 = substr("`fmt'", 3, 1)
	Period per : "`period'" `return(unit1)'
	return local unit `per'

	ret local timevar "`timevar'"
	ret local panelvar "`panel'"
end


program define Clear
	/* careful:  this list is repeated in iis.ado and tis.ado */
	char _dta[_TStvar]
	char _dta[_TSpanel]
	char _dta[_TSitrvl]
	char _dta[tis]
	char _dta[iis]
end


program define Query, rclass
	local timevar `_dta[_TStvar]'
	local panel   `_dta[_TSpanel]'

	/* see if we have gaps */
	local intval = `_dta[_TSitrvl]'
	if "`panel'" == "" {
		qui count if `timevar' - `timevar'[_n-1] != `intval' & /*
			*/ `timevar' != . in 2/l   
		local gaps = r(N)
	}
	else {
		qui count if `timevar' - `timevar'[_n-1] != `intval' &	/*
			*/ `timevar' != . & `panel' == `panel'[_n-1]	/*
			*/ in 2/l  
		local gaps = r(N)
	}
	
	/* find the time range of the data */
	if "`panel'" == "" {
		tempvar seenvar
		local t0 = `timevar'[1]
		gen long `seenvar' = sum(`timevar' != .)
		local t1 = `timevar'[`seenvar'[_N]]
	}
	else {
		/* display panel report */
		qui sum `panel', meanonly
		ret scalar imin = r(min)
		ret scalar imax = r(max)
		di in gr _col(8)  "panel variable:  " /*
			*/ in ye "`panel', " r(min) " to " r(max)

		tempname firstob lastob

		gen byte `firstob' = `panel' != . & `panel' != `panel'[_n-1]
		qui sum `timevar' if `firstob', meanonly
		local t0 = r(min)
		if r(min) != r(max) { local unbal 1 }

		gen byte `lastob' = `panel' != . & `timevar' != . & /*
			*/ (`panel' != `panel'[_n+1] | `timevar'[_n+1] == .)
		qui sum `timevar' if `lastob', meanonly
		local t1 = r(max)
		if r(min) != r(max) { local unbal 1 }
	}

	local fmt : format `timevar'
	local t0s = trim(string(`t0', "`fmt'"))
	local t1s = trim(string(`t1', "`fmt'"))
	di in gr _col(9)  "time variable:  " /*
		*/ in ye "`timevar', `t0s' to `t1s'" _c

	if `gaps' > 0 {
		di in ye ", but with" _c
		if `gaps' == 1 {
			di in ye " a gap"
		}
		else	di in ye " gaps"
	}
	else di

/*
	if "`unbal'" != "" {
		di in bl (note:  panels are not balanced)"
	}
*/

	ret scalar tmin = `t0'
	ret scalar tmax = `t1'
	ret local tmins `t0s'
	ret local tmaxs `t1s'

end


program define Period
	args newper colon per unit1

	if "`per'" == "" {
		if "`unit1'" != "" {
			local g "generic" 
			local d "daily" 
			local w "weekly" 
			local m "monthly" 
			local q "quarterly" 
			local h "halfyearly" 
			local y "yearly"

			capture c_local `newper' ``unit1''
		}
		else	c_local `newper' "generic"
	}
	else	c_local `newper' `per'
end


exit

program define ChkIntvl				/* not currently used */
	args timedif intrval report

	capture assert abs(`timedif' / `intrval' - /*
		*/ round(`timedif' / `intrval', 1))  < .01  if `timedif' != .
	if _rc != 0 {
di in red "differences in the time variable disagree with the time interval"
		if "`report'" != "" {
			list `timedif' if abs(`timedif' / `intrval' - /*
				*/ round(`timedif' / `intrval', 1))  < .01  /*
				*/ & `timedif' != .
		}

		exit 451
	}
end



----------------------------------------------------------------------------
Undocs:  nocheck interval(#)

----------------------------------------------------------------------------

lines w/ `interva' for interval if interval added

----------------------------------------------------------------------------

----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8

tsset t
     panel variable:  panelvar, ### to ###
      time variable:  timevar, 1956.2 to 1999.4, but with gaps

     Panel/ID variable:  panelvar   (#### , ####)
  Time-series variable:  timevar1   (1956.2 , 1988.4)

  Time-series variable:  tsvar
     Panel/ID variable:  idvar
  Range of time series:  1956.2 to 1988.4  (panels are not balanced)

⌨️ 快捷键说明

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