📄 tsset.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 + -