## How to convert second to time format

Regular Contributor
Posts: 222

# How to convert second to time format

Hello everyone,

I have a time variable denotes 3662 seconds(3600+60+2),

I wonder how to convert the 3662 seconds to 1hour and 1minutes and 2 second (01:01:02) format.

Thanks

Mike

data have;

second=3662;

run;

data need;/*this need modification*/

set have;

time= input(second,hh:mm:ss.);

run;

Regular Contributor
Posts: 222

## Re: How to convert second to time format

FYI,

data need;/*this need modification*/

set have;

time=put(second,time13.);

run;

Posts: 5,543

## Re: How to convert second to time format

Use hms function :

data have;
second=3662;
run;

data need;/*this need modification*/
set have;
format time time10.;
time= hms(0,0,second);
run;

proc print; run;

PG

PG
Posts: 3,852

## Re: How to convert second to time format

Could you have skipped that HMS function?

Posts: 5,543

## Re: How to convert second to time format

Yes, since SAS stores time values in units of seconds. But I prefer to remain independent of internal representations, even when they are documented. That's why I prefer to use INTNX("DAY', aDate, 1) instead of aDate+1 to find the day after aDate. Call me a purist!

PG

PG
Posts: 1,345

## Re: How to convert second to time format

If you need a character variable showing 01:01:02 Mike has provided the solution.  But you would need to keep the SECOND variable if you plan to do any time interval calculations or anlysis that goes beyond frequencies.  So you might simply apply the time8.0 format to SECOND for reporting purposes and avoid creating the new TIME variable entriely.

Then you could do things like:

proc freq data=have;

tables second;

format second time8.0;

run;

which would give you tables in whole second intervals, but reported in the hh:mm:ss format that you requested.  Or if you used time5.0 you'd get whole minute intervals (hh:mm).  Or time2.0 for hours.  But remember the TIME format is for a duration measure (not time-of-day), so it will display values of 24 hours and beyond.

Now if you want to see 25:01:01 reported as 01:01:01, then you can use the TOD8.0, TOD5.0, or TOD3.0 formats.

Regular Contributor
Posts: 222

## Re: How to convert second to time format

Mike's method return character and PG's method keep numeric,

if we use call symput('ggg',time); in a datastep,

the character one will get atime formated  &ggg,while the numeric one will keep the original numeric value to the macro varialbe

Posts: 1,345