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 ...
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
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.