*! 1.0.1 NJC 20 February 2003 * 1.0.0 NJC 24 January 2003 program _gseconds version 8 gettoken type 0 : 0 gettoken g 0 : 0 gettoken eqs 0 : 0 /* "=" */ gettoken paren 0 : 0, parse("() ") /* "(" */ gettoken time 0 : 0, parse("() ") gettoken paren 0 : 0, parse("(), ") /* ")" */ if `"`paren'"' != ")" { error 198 } confirm str var `time' syntax [if] [in] [ , maxhour(int 24) ] quietly { tempvar touse shour hour smin min ssec sec work mark `touse' `if' `in' markout `touse' `time', strok capture assert index(`time',":") if `touse' if _rc { di as err "missing colons in `time'" exit 459 } else { gen `shour' = /// substr(`time',1,index(`time',":")-1) if `touse' gen `hour' = real(`shour') count if mi(`hour') & `touse' if r(N) { di as err "problematic characters in `time'" exit 459 } gen `work' = /// substr(`time',index(`time',":")+1,.) if `touse' } capture assert index(`work',":") if `touse' if _rc { di as err "missing colons in `time'" exit 459 } else { gen `smin' = /// substr(`work',1,index(`work',":")-1) if `touse' gen `min' = real(`smin') count if mi(`min') & `touse' if r(N) { di as err "problematic characters in `time'" exit 459 } gen `ssec' = /// substr(`work',index(`work',":")+1,.) if `touse' } capture assert !index(`ssec',":") if `touse' if _rc { di as err "too many colons in `time'" exit 459 } else { gen `sec' = real(`ssec') count if mi(`sec') & `touse' if r(N) { di as err "problematic characters in `time'" exit 459 } } capture assert `hour' >= 0 & `hour' < `maxhour' if `touse' if _rc { di as err "hour value(s) not 0 to `--maxhour'" exit 459 } capture assert `hour' == int(`hour') if `touse' if _rc { di as err "hours contain non-integer value(s)" exit 459 } capture assert `min' >= 0 & `min' < 60 if `touse' if _rc { di as err "minute value(s) not 0 to 59" exit 459 } capture assert `min' == int(`min') if `touse' if _rc { di as err "minutes contain non-integer value(s)" exit 459 } capture assert `sec' >= 0 & `sec' < 60 if `touse' if _rc { di as err "second value(s) not 0 to 59" exit 459 } capture assert `sec' == int(`sec') if `touse' if _rc { di as err "seconds contain non-integer value(s)" exit 459 } gen long `g' = `sec' + `min' * 60 + `hour' * 3600 if `touse' } end