Gary Longton replied to Christa Scholtz and Radu Ban
>
> > I have a data field where the duration of an event is
> recorded in this
> > format:
> >
> > hour:minute:second
> >
> > eg: an event that lasts 5 hours, 27 minutes and 13
> seconds is 5:27:13.
> >
> > How do I get Stata to convert this into total number of seconds?
>
> and Radu Ban replied:
>
> > you can try sth like:
> > if your_time is the variable you have for time
> >
> > gen str8 stime = your_time
> > gen shours = substr(stime, 1, 2) *takes the first two digits
> > gen hours = real(shour) *reads first two digits as number
> > gen sminutes = substr(stime, 4, 2) *takes digits 4 and 5
> > gen minutes = real(sminutes)
> > gen sseconds = substr(stime, 7, 2)
> > gen seconds = real(sseconds)
> >
> > *now add up
> > gen totsecs = 3600*hours + 60*minutes + seconds
>
> Radu's approach assumes that the original time string will
> always have
> 2-digit hours, which will often be too restrictive, and
> won't work for
> Christa's example.
>
> An easier one-step approach for parsing the time string into the 3
> component numeric variables would be to use Nick Cox's
> -split- program
> (available on SSC), which could be followed with Radu's
> expression for
> total seconds.
Anyone in this territory might want to know of
various -egen- functions in the -egenmore- package
on SSC.
dhms(d h m s) [ , format(format) ] creates a date
variable from Stata date variable or date d with a fractional part
reflecting the number of hours, minutes and seconds past midnight.
h can be a variable containing integers between 0 and 23
inclusive or a single integer in that range. m and s can be
variables
containing integers between 0 and 59 or single integer(s) in that
range. Optionally a format, usually but not necessarily a date
format,
can be specified. The resulting variable, which is by default
stored
as a double, may be used in date and time arithmetic in which the
time of day is taken into account.
elap(time) [ , format(format) ] creates a string variable
which contains the number of days, hours, minutes and seconds
associated with an integer variable containing a number of
elapsed seconds. Such a variable might be the result of date/time
arithmetic, where a time interval between two timestamps has been
expressed in terms of elapsed seconds. Leading zeroes are included
in the hours, minutes, and seconds fields. Optionally, a format
can be specified.
elap2(time1 time2) [ , format(format) ] creates a string variable
which contains the number of days, hours, minutes and seconds
associated with a pair of time values, expressed as fractional
days,
where time1 is no greater than time2. Such time values may be
generated
by function dhms(). elap2() expresses the interval between these
time values in readable form. Leading zeroes are included in the
hours,
minutes, and seconds fields. Optionally, a format can be
specified.
hmm(timevar) generates a string variable showing timevar, interpreted
as indicating time in minutes, represented as hours and minutes in
the form "[...h]h:mm". For example, times of 9, 90, 900 and
9000 minutes would be represented as "0:09","1:30", "15:00"
and "150:00". The option round(#) rounds the result: round(1)
rounds the time to the nearest minute. The option trim trims the
result of leading zeros and colons, except that an isolated 0 is
not trimmed. With trim "0:09" is trimmed to "9" and "0:00"
is trimmed to "0".
hmm() serves equally well for representing times in seconds in
minutes and seconds in the form "[...m]m:ss".
hmmss(timevar) generates a string variable showing timevar,
interpreted
as indicating time in seconds, represented as hours, minutes and
seconds
in the form "[...h:]mm:ss". For example, times of 9, 90, 900 and
9000 seconds would be represented as "00:09","01:30", "15:00"
and "2:30:00". The option round(#) rounds the result: round(1)
rounds the time to the nearest second. The option trim trims the
result of leading zeros and colons, except that an isolated 0 is
not trimmed. With trim "00:09" is trimmed to "9" and "00:00"
is trimmed to "0".
hms(h m s) [ , format(format) ] creates an elapsed
time variable containing the number of seconds past midnight.
h can be a variable containing integers between 0 and 23
inclusive or a single integer in that range. m and s can be
variables
containing integers between 0 and 59 or single integer(s) in that
range. Optionally a format can be specified.
tod(time) [ , format(format) ] creates a string
variable which contains the number of hours, minutes and seconds
associated with an integer in the range 0 to 86399, one less than
the number of seconds in a day. Such a variable is produced by
hms(), which see above. Leading zeroes are included in the hours,
minutes, and seconds fields. Colons are used as separators.
Optionally a format can be specified.
Kit Baum ([email protected]) is the author of dhms(), elap(), elap2(),
hms() and tod().
Nick
[email protected]
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/