How to convert Character date to SAS Date?

How to convert Character date to SAS Date?

SAS does not treat text strings like dates, even if they look like them. Thus, you cannot perform operations on dates stored as strings. As a result, you need to convert the character date to SAS Date to work with them.

How to Convert character date to SAS Date?

It is crucial to determine in what format the date is stored before converting it into a SAS date. Or, to put it more precisely, what informat does the INPUT function need to read the variable to convert it correctly?

Thus, the conversion is a two-step process:

  • Identify the format in which the text date is stored.
  • Convert the character variable to a valid SAS date using the INPUT function.

For more details on SAS date format and informats, see our post on SAS date formats.

data ex1;
dt="11/16/1989";
dt2=input(dt,MMDDYY10.);
run;

Note that yymmdd6. is an informat in this statement

Print without format:

convert Character date to SAS Date

Print with format (YYMMDD10.):

How to convert Character date to SAS Date?

It is important to create a new variable for conversion. By using the same variables as before, variables will remain characters.

It is important to create a new variable for conversion. By using the same variables as before, variables will remain characters.

Convert to Different Date Format

We originally stored the data in Month-Date-Year-11/16/1989 format, but as a character. Using SAS date format, we can convert it to Date-Month-Year.

format dt1 ddmmyyD10.;
Convert to Different Date Format

Convert Multiple Character Variables to Date

Consider the case where you must convert multiple character variables to SAS datevalue format. It is possible to convert them using SAS arrays.

data ex2;
input dt: $10. dt2: $10.;
cards;
14-04-29 2019-11-16
15-02-05 2022-12-01
16-11-22 2022-12-07
16-12-21 2022-12-08
17-10-19 2022-12-15
;
run;
Convert Multiple Character Variables to Date

SAS Code to covert all character dates to SAS dates

data out;
set ex2;
array olddates $ dt1 dt2;
array newdates dt3 dt4;
do i = 1 to dim(olddates);
newdates(i) = input(strip(olddates(i)),yymmdd10.);
end;
drop i;
format dt3-dt4 yymmdd10.;
run;
covert all character dates to SAS dates

Using the INPUT function in PROC SQL

You must first convert the text date into a numeric SAS date using the input function, and then you can attach a format to the result to show how you want this SAS date to be printed.

proc sql;
	create table newdt as Select input(dt, mmddyy10.) as date format=weekdate.
from ex1;
Quit;

How to Convert a String into a Datetime?

A text string can also be converted into a datetime, just as you can convert it into a date.

In SAS, a DateTime variable is a number of seconds between midnight on January 1, 1960, and a specific date, including the hour, minute, and second.

For example, a number such as 1925078399 represents December 31, 2020, at 23:59:59.

With the INPUT function, you can convert a string that looks like a datetime (like 31DEC2020 23:59:59) into a SAS datetime variable.

This function needs a text string and an informat as its two arguments. The informat tells SAS how to read the string of text.

INPUT(text_string, datetime_format);

data ex3;
    length datetimechar $30;
	datetimechar= "07SEP2022 23:59:59";
	datetime_num = input(datetimechar, DATETIME.);
	datetime_num_fmt=datetime_num;
	output;
    datetimechar = "09.15.2012 03:53:00 pm";
    datetime_num = input(datetimechar, mdyampm25.);
	datetime_num_fmt=datetime_num;
	output;
	format datetime_num_fmt datetime23.;
run;
Convert a String into a Datetime

How to read raw data as SAS Date variables?

Raw data can be read into SAS date variables using the appropriate informat.

If you want to be able to display the names in a human-readable format, it is necessary to assign an appropriate format to the variable DATE.

data dates;
input date yymmdd6.;
format date yymmdd10.;
cards;
220901
220902
220903
;
run;
ead raw data as SAS Date variables

How to read multiple date values from raw data?

For data that isn’t standard (like commas, dollars, dates, etc.) or is longer than 8 bytes when using the List input technique, you would need to use either the INFORMAT statement or the colon modifier with the INPUT statement.

Method 1: Using the INFORMAT or ATTRIB Statement: Use the INFORMAT or ATTRIB Statement to assign a format to the input variables.

data ex4;
  informat date1  ddmmyy10. date2 mmddyy10.;
  input date1  date2;
  format date1-date2 yymmdd10.;
datalines;
05/09/2022 12/30/2022
06/09/2015 12/31/2022
;
run;
read multiple date values from raw data

Method 2: Use Colon (:) input modifier

data ex5;
  input date1: ddmmyy10. date2: mmddyy10.;
  format date1-date2 yymmdd10.;
datalines;
05/09/2022 12/30/2022
06/09/2015 12/31/2022
;
run;

One format to read any dates in SAS

With the ANYDTDTE format, it’s possible to input many messy date values easily.

data Dates;
input @1 date $21. @22 dateinfo $10. formatted_date anydtdte21.;
FORMAT formatted_date DATE9.;
datalines;
08SEP22                DATE     08SEP22
08SEP2022 14:30:08.5   DATETIME 08SEP2022 14:30:08.5
08092022               DDMMYY   08092022
20120908               JULIAN   20120908
08/09/22               DDMMYY   08/09/22 
SEP2022                MONYY    SEP2022
14:30                  TIME     14:30 
20220908               YYMMDD   20220908
22q4                   YYQ      12q4
Sep 8, 2012            none     Sep 1, 2012
September 8, 2012      none     September 1, 2012 
;
run;
ANYDTDTE format

As you can see, the ANYDTDTE informat reads 11 different strings but converts all of them to the SAS date value.

Summary

It is so important that we will emphasize it again. It is not recommended to store date values as character variables. Dates stored as characters will lose their computational power since they are text values. Furthermore, you cannot sort them through time in a meaningful way. Dates will sort them alphabetically if you sort them, which will make no sense.

Every week we'll send you SAS tips and in-depth tutorials

JOIN OUR COMMUNITY OF SAS Programmers!

Subhro Kar is an Analyst with over five years of experience. As a programmer specializing in SAS (Statistical Analysis System), Subhro also offers tutorials and guides on how to approach the coding language. His website, 9to5sas, offers students and new programmers useful easy-to-grasp resources to help them understand the fundamentals of SAS. Through this website, he shares his passion for programming while giving back to up-and-coming programmers in the field. Subhro’s mission is to offer quality tips, tricks, and lessons that give SAS beginners the skills they need to succeed.