The SAS Output Delivery System and reporting techniques

Transforming a string to become a datetime value

Reply
N/A
Posts: 0

Transforming a string to become a datetime value

I have a dataset with a string variable that has this appearance : "10/16/2007 22:37:30". I would like to convert this string to become a datetime value. I read that the datetime format is this 16Oct2007:22:37:30 but I was trying to create a date and a time variable from the string using the substrn function and then join them to create my datetime variable, all that in a data step

Im unable to do it, I though it would be a great idea to ask here about the pertinence of my technique before trying to make it work that way, do you guys have any tips on the best way to do this ?

cheers
Yan
Super Contributor
Posts: 394

Re: Transforming a string to become a datetime value

Posted in reply to deleted_user
Here's my solution. Use substr to extract the date part of the string and the time part of the string into two variables. Then use the input function with the mmddyy10. informat to convert the date string to a SAS date value, and with the time8. informat to convert the time string to a SAS time value.

Given a SAS date value and a SAS time value, the SAS documentation for the DHMS function explains how to combine them into a SAS datetime value.

Here's a data step to test my algorithm:

[pre]
data _null_;
input str $20.;
dtstr = substr(str, 1, 10);
tmstr = substr(str, 12, 8);

dt = input(dtstr, mmddyy10.);
tm = input(tmstr, time8.);

dttm = dhms(dt, 0, 0, tm);
put dttm datetime19.;
datalines;
10/16/2007 22:37:30
05/01/1953 11:15:27
07/04/1976 23:59:59
12/31/2000 00:00:00
run;[/pre]

Please test this for yourself to make sure it works.
N/A
Posts: 0

Re: Transforming a string to become a datetime value

Thank you Tim

meanwhile someone also provided me this way of acheiving the desired result using the scan function instead of substr :

This works :
Data _null_ ;
%let entry_date_time_orig = "10/13/2007 01:14:35" ;
entry_date_time=sum((input(scan(&entry_date_time_orig.,1,' '),mmddyy10.)*60*60*24),input(scan(&entry_date_time_orig.,2,' '),time8.));
put entry_date_time=datetime.;
run;
Valued Guide
Posts: 2,177

Re: Transforming a string to become a datetime value

Posted in reply to deleted_user
try informat mdyampm.
like

%put %sysfunc( inputn( 10/13/2007 01:14:35, mdyampm), datetime);

PeterC
N/A
Posts: 0

Re: Transforming a string to become a datetime value

hi guys..

how about if the input is not a string. but date9. values.
i have a variable contain a date type : yymmdd10.
and i want to make a type datetime19.
ex : position_date is =


==================================================
data _null_;
%put &position_date;
myDate = input(symget('position_date'),yymmdd10.);
format myDate datetime19.;
put myDate=;
run;

the log result :

994 data _null_;
995 %put &position_date;
2008-03-31
996 myDate = input(symget('position_date'),yymmdd10.);
997 format myDate datetime19.;
998 put myDate=;
999 run;

myDate=01JAN1960:04:53:42
NOTE: DATA statement used (Total process time):
real time 0.03 seconds
cpu time 0.01 seconds

==============================================

why myDate became : 01JAN1960:04:53:42 not 31MAR2008:00:00:00 ?
how to make a date like that?

thank you.
regards


capricornday
Valued Guide
Posts: 2,177

Re: Transforming a string to become a datetime value

Posted in reply to deleted_user
sas datetime formats are suitable for datetime values, not date values.
Convert from a numeric date value to datetime value with function dhms(), like[pre] myDateTime = DHMS( myDate, 0,0,0 ) ; [/pre] Before reading the doc for the datetime() function http://support.sas.com/documentation/cdl/en/lrdict/61724/HTML/default/a000179419.htm , I think you should read up on how SAS manages dates and times in the Concepts section at http://support.sas.com/documentation/cdl/en/lrcon/61722/HTML/default/a002200738.htm.

Good Luck

PeterC
N/A
Posts: 0

Re: Transforming a string to become a datetime value

Thanks Peter.C
your links also usefull for me.


regards'
capricornday
Ask a Question
Discussion stats
  • 6 replies
  • 219 views
  • 0 likes
  • 3 in conversation