Hi all,
How can I separate date (date9.) and time (time5.) from below data:
Obs subj date
1 CA2099DX-1-304 2019-08-09
2 CA2099DX-1-304 2019-06-13T12:00
3 CA2099DX-1-304 2019-07-13T09:00
4 CA2099DX-1-304 2019-05-06
5 CA2099DX-108-175 2019-03-08
6 CA2099DX-108-175 2019-06-28
7 CA2099DX-108-175 2019-03-07
8 CA2099DX-108-175 2019-03-07
9 CA2099DX-108-175 2019-03-07
10 CA2099DX-108-175 2019-02-04
11 CA2099DX-108-175 2019-01-10T00:00
12 CA2099DX-108-175 2019-01-28
13 CA2099DX-108-175 2019-03-08
14 CA2099DX-108-175 2019-05-02
15 CA2099DX-108-175 2019-02-04
Thanks,
Adi
Read the field with in-format B8601DT. no need to fiddle with anything.
datetime :b8601dt.;
and I want to create datetime20. by using those two new variables and if time is missing then I want to show as following format
"07MAR2019:00:00:00"
Thanks,
Adithya
Please try the below code
data have;
input Obs subj :$20. datetime:$100.;
if index(datetime,'T') then newdate=input(scan(datetime,1,'T'),yymmdd10.);
else newdate=input(datetime,yymmdd10.);
if index(datetime,'T') then time=input(scan(datetime,2,'T'),time5.);
if index(datetime,'T') then newdatetime=input(datetime,is8601dt.);
else newdatetime=input(cats(datetime,'T00:00'),is8601dt.);
format newdate date9. time time5. newdatetime datetime20.;
cards;
1 CA2099DX-1-304 2019-08-09
2 CA2099DX-1-304 2019-06-13T12:00
3 CA2099DX-1-304 2019-07-13T09:00
4 CA2099DX-1-304 2019-05-06
5 CA2099DX-108-175 2019-03-08
6 CA2099DX-108-175 2019-06-28
7 CA2099DX-108-175 2019-03-07
8 CA2099DX-108-175 2019-03-07
9 CA2099DX-108-175 2019-03-07
10 CA2099DX-108-175 2019-02-04
11 CA2099DX-108-175 2019-01-10T00:00
12 CA2099DX-108-175 2019-01-28
13 CA2099DX-108-175 2019-03-08
14 CA2099DX-108-175 2019-05-02
15 CA2099DX-108-175 2019-02-04
;
Read the field with in-format B8601DT. no need to fiddle with anything.
datetime :b8601dt.;
@chinna0369 wrote:
Hi all,
How can I separate date (date9.) and time (time5.) from below data:
Obs subj date
1 CA2099DX-1-304 2019-08-09
2 CA2099DX-1-304 2019-06-13T12:00
3 CA2099DX-1-304 2019-07-13T09:00
4 CA2099DX-1-304 2019-05-06
5 CA2099DX-108-175 2019-03-08
6 CA2099DX-108-175 2019-06-28
7 CA2099DX-108-175 2019-03-07
8 CA2099DX-108-175 2019-03-07
9 CA2099DX-108-175 2019-03-07
10 CA2099DX-108-175 2019-02-04
11 CA2099DX-108-175 2019-01-10T00:00
12 CA2099DX-108-175 2019-01-28
13 CA2099DX-108-175 2019-03-08
14 CA2099DX-108-175 2019-05-02
15 CA2099DX-108-175 2019-02-04
Thanks,
Adi
Is that actually the content of a SAS dataset? If so, what is the current format for that "date" variable?
If that is actually a character variable the first thing will be to read the date into a SAS date/ datetime value.
Yes, this is SAS content. and my date variable is charecter $16. format.
I don't understand second question? can you explain it to me clearly?
Thanks,
Adithya
data have;
input Obs subj :$20. datetime :ymddttm24.;
date=datepart(datetime);
time=timepart(datetime);
format datetime datetime20. date date9. time time5.;
cards;
1 CA2099DX-1-304 2019-08-09
2 CA2099DX-1-304 2019-06-13T12:00
3 CA2099DX-1-304 2019-07-13T09:00
4 CA2099DX-1-304 2019-05-06
5 CA2099DX-108-175 2019-03-08
6 CA2099DX-108-175 2019-06-28
7 CA2099DX-108-175 2019-03-07
8 CA2099DX-108-175 2019-03-07
9 CA2099DX-108-175 2019-03-07
10 CA2099DX-108-175 2019-02-04
11 CA2099DX-108-175 2019-01-10T00:00
12 CA2099DX-108-175 2019-01-28
13 CA2099DX-108-175 2019-03-08
14 CA2099DX-108-175 2019-05-02
15 CA2099DX-108-175 2019-02-04
;
And if your data is in a SAS dataset, then
data have;
input Obs subj :$20. datetime :$24.;
cards;
1 CA2099DX-1-304 2019-08-09
2 CA2099DX-1-304 2019-06-13T12:00
3 CA2099DX-1-304 2019-07-13T09:00
4 CA2099DX-1-304 2019-05-06
5 CA2099DX-108-175 2019-03-08
6 CA2099DX-108-175 2019-06-28
7 CA2099DX-108-175 2019-03-07
8 CA2099DX-108-175 2019-03-07
9 CA2099DX-108-175 2019-03-07
10 CA2099DX-108-175 2019-02-04
11 CA2099DX-108-175 2019-01-10T00:00
12 CA2099DX-108-175 2019-01-28
13 CA2099DX-108-175 2019-03-08
14 CA2099DX-108-175 2019-05-02
15 CA2099DX-108-175 2019-02-04
;
data want;
set have;
datetime_num =input(datetime,ymddttm24.);
date=datepart(datetime_num);
time=timepart(datetime_num);
format datetime_num datetime20. date date9. time time5.;
run;
INPUT() can be used to convert dates and times.
You can try ANYDTDTM. as your informat and it should do a decent job at guessing the data. I think that will get you what you want and you just need to apply the formats that after the fact.
Here's a great, but longer and in depth, reference for dates and times in SAS - it covers in detail how to do this and answers your question in detail.
https://communities.sas.com/t5/SAS-Communities-Library/Working-with-Dates-and-Times-in-SAS-Tutorial/...
@chinna0369 wrote:
Hi all,
How can I separate date (date9.) and time (time5.) from below data:
Obs subj date
1 CA2099DX-1-304 2019-08-09
2 CA2099DX-1-304 2019-06-13T12:00
3 CA2099DX-1-304 2019-07-13T09:00
4 CA2099DX-1-304 2019-05-06
5 CA2099DX-108-175 2019-03-08
6 CA2099DX-108-175 2019-06-28
7 CA2099DX-108-175 2019-03-07
8 CA2099DX-108-175 2019-03-07
9 CA2099DX-108-175 2019-03-07
10 CA2099DX-108-175 2019-02-04
11 CA2099DX-108-175 2019-01-10T00:00
12 CA2099DX-108-175 2019-01-28
13 CA2099DX-108-175 2019-03-08
14 CA2099DX-108-175 2019-05-02
15 CA2099DX-108-175 2019-02-04
Thanks,
Adi
data jugular;
input Obs subj :$20. datetime :$24.;
cards;
1 CA2099DX-1-304 2019-08-09
2 CA2099DX-1-304 2019-06-13T12:00
3 CA2099DX-1-304 2019-07-13T09:00
4 CA2099DX-1-304 2019-05-06
5 CA2099DX-108-175 2019-03-08
6 CA2099DX-108-175 2019-06-28
7 CA2099DX-108-175 2019-03-07
8 CA2099DX-108-175 2019-03-07
9 CA2099DX-108-175 2019-03-07
10 CA2099DX-108-175 2019-02-04
11 CA2099DX-108-175 2019-01-10T00:00
12 CA2099DX-108-175 2019-01-28
13 CA2099DX-108-175 2019-03-08
14 CA2099DX-108-175 2019-05-02
15 CA2099DX-108-175 2019-02-04
;
data foramen;
set jugular;
datetime_num =input(datetime,ymddttm24.);
date=datepart(datetime_num);
time=timepart(datetime_num);
format datetime_num datetime20. date date9. time time5.;
run;
This solution is lot easier ...
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.
SAS' Charu Shankar shares her PROC SQL expertise by showing you how to master the WHERE clause using real winter weather data.
Find more tutorials on the SAS Users YouTube channel.