*! 1.1.0 NJC 27 Feb 2006 * 1.0.0 CFB 29 Sep 2002 * 1.1.0 NJC 7 December 2000 _gbom * 1.0.0 NJC 12 July 2000 program define _gdhms version 6 gettoken type 0 : 0 gettoken g 0 : 0 gettoken eqs 0 : 0 /* "=" */ gettoken paren 0 : 0, parse("() ") /* "(" */ gettoken date 0 : 0, parse("() ") gettoken hour 0 : 0, parse("() ") gettoken min 0 : 0, parse("() ") gettoken sec 0 : 0, parse("() ") gettoken paren 0 : 0, parse("(), ") /* ")" */ if `"`paren'"' != ")" { error 198 } syntax [if] [in] [ , Format(str) ] quietly { tempvar touse mark `touse' `if' `in' replace `touse' = 0 if missing(`date', `hour', `min', `sec') capture assert `date' == int(`date') if `touse' if _rc { di in r "`date' contains non-integer value(s)" exit 410 } capture assert `hour' >= 0 & `hour' < 24 if `touse' if _rc { di in r "`hour' contains value(s) not 0 to 23" exit 198 } capture assert `hour' == int(`hour') if `touse' if _rc { di in r "`hour' contains non-integer value(s)" exit 410 } capture assert `min' >= 0 & `min' < 60 if `touse' if _rc { di in r "`min' contains value(s) not 0 to 59" exit 198 } capture assert `min' == int(`min') if `touse' if _rc { di in r "`min' contains non-integer value(s)" exit 410 } capture assert `sec' >= 0 & `sec' < 60 if `touse' if _rc { di in r "`sec' contains value(s) not 0 to 59" exit 198 } capture assert `sec' == int(`sec') if `touse' if _rc { di in r "`sec' contains non-integer value(s)" exit 410 } gen double `g' = `date' + (`sec' + `min'*60 + `hour'*3600)/86400 if `touse' if "`format'" != "" { capture format `g' `format' if _rc { noi di in bl "`format' invalid format" } } } end