BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
Rakeon
Quartz | Level 8

Hi I have to import in datatime SAS this datetime:

 

2011-02-28-23.59.59.999999

2015-05-22-11.21.17.558222

2015-05-22-12.13.30.386022

I try with this code:

data prova;
	a='2011-02-28-23.59.59.999999';
	b= input(a,ANYDTDTM26.);
	c=put(b,datetime.);
run;


But I get the missing value...
I can't find the correct informat for this type of data....
Any of you, has some suggestion?

1 ACCEPTED SOLUTION

Accepted Solutions
Daniel-Santos
Obsidian | Level 7

I think anyddtm. will truncate the milliseconds part.

 

Try this to precisely input the datetime.

 

data _null_;

 

    a='2011-02-28-23.59.59.999999';

    b=inputn(substr(a,1,10),'yymmdd10.')*24*60*60+inputn(substr(a,12),'time15.');

 

    put b datetime25.6;

run;

 

This will split the datetime into two parts and input them separately with the correct informat.

 

Hope it helps.

 

Daniel Santos @ www.cgd.pt

View solution in original post

4 REPLIES 4
error_prone
Barite | Level 11

Using anydtdtm. instead of anydtdtm26. seems to solve the issue.

Daniel-Santos
Obsidian | Level 7

I think anyddtm. will truncate the milliseconds part.

 

Try this to precisely input the datetime.

 

data _null_;

 

    a='2011-02-28-23.59.59.999999';

    b=inputn(substr(a,1,10),'yymmdd10.')*24*60*60+inputn(substr(a,12),'time15.');

 

    put b datetime25.6;

run;

 

This will split the datetime into two parts and input them separately with the correct informat.

 

Hope it helps.

 

Daniel Santos @ www.cgd.pt

Kurt_Bremser
Super User

Convert the input data to a properly formatted ISO 8601 datetime value, and then use the proper informat:

data have;
input value_char $26.;
substr(value_char,11,1) = 'T';
substr(value_char,14,1) = ':';
substr(value_char,17,1) = ':';
value = input(value_char,e8601dt26.6);
format value datetime26.6;
cards;
2011-02-28-23.59.59.999999
2015-05-22-11.21.17.558222
2015-05-22-12.13.30.386022
;
run;

Instead of the 'T', you can also use a blank. But the 'T' conforms to the norm.

data_null__
Jade | Level 19

SAS has an informat for that.  YMDDTTM.

 

data date;
   input date:ymddttm.;
   line=_infile_;
   format date datetime32.6;
   cards;
2011-02-28-23.59.59.999999
2015-05-22-11.21.17.558222
2015-05-22-12.13.30.386022
;;;;;
   run;
proc print;
   run;

 Capture.PNG

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

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