DATA Step, Macro, Functions and more

Convert HHMM (character format) into HH:MM format

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 5
Accepted Solution

Convert HHMM (character format) into HH:MM format

So I have a column that looks like this:

 

 

data time;

input  time $4.;

datalines;
0930
1000
0800
1300
1530
;
run;


 

 

and I want it to look like this:

 

09:30

10:00

08:00

13:00

15:30

 

Which is in a HHMM. or TIME. format

 

Tried the PUT statement and came back with an error


ERROR: The informat HHMM was not found or could not be loaded.

Is there any simple ways of doing this?

Thanks.


Accepted Solutions
Solution
‎09-07-2017 09:47 PM
Super User
Super User
Posts: 7,981

Re: Convert HHMM (character format) into HH:MM format

data time;
  input time $4.;
  time_calc=input(time,hhmmss4.);
  format time_calc time5.;
datalines;
0930
1000
0800
1300
1530
;
run;

View solution in original post


All Replies
Super Contributor
Posts: 345

Re: Convert HHMM (character format) into HH:MM format

Maybe i am blind, but i don't see the mentioned put statement in your code.

 

Index of informats: https://support.sas.com/documentation/cdl/en/leforinforref/64790/HTML/default/viewer.htm#n0verk17pch...

 

I suggest using "hhmmss" instead of "hhmm".

Occasional Contributor
Posts: 5

Re: Convert HHMM (character format) into HH:MM format

Posted in reply to andreas_lds
Sorry I failed to include that in my post! So I guess using hhmmss instead of hhmm is because SAS calculates time based on seconds?
Solution
‎09-07-2017 09:47 PM
Super User
Super User
Posts: 7,981

Re: Convert HHMM (character format) into HH:MM format

data time;
  input time $4.;
  time_calc=input(time,hhmmss4.);
  format time_calc time5.;
datalines;
0930
1000
0800
1300
1530
;
run;
Occasional Contributor
Posts: 5

Re: Convert HHMM (character format) into HH:MM format

Thanks a lot! Now I know what I'm doing wrong.
Super Contributor
Posts: 266

Re: Convert HHMM (character format) into HH:MM format

I could not find relevant format to read it direclty. But you can use below code to get desired result.

 

data time(keep=t1 time);

input  time $4.;
t1=substr(time,1,2)*3600 +substr(time,3,2)*60 ;
format t1 time5.;
datalines;
0930
1000
0800
1300
1530
;
run;
☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 5 replies
  • 192 views
  • 4 likes
  • 4 in conversation