1
votes

Question: How do I combine YEAR and MONTH data into a single mm/dd/yyyy date without converting from numeric to character types?


I have date data which needs to be read into SAS. It comes in two columns, YEAR and MONTH. The data looks similar to this:

 YEAR MONTH
 2012 1
 2012 1
 2013 10
 2012 2
 2014 7

The data must be stored in mm/dd/yyyy format. For example, YEAR = 2013 and MONTH = 10 corresponds to 10/01/2013.

I have accomplished this via:

if month = 1 then
  date = input(compress("01/01/"||year),mmddyy10.);
else if month = 2 then
  date = input(compress("02/01/"||year),mmddyy10.);
...

However, the log gives the following note:

NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).

I understand that this is being done because SAS stores dates as numeric values since January 1, 1960. The Compress function returns a character value. Thus, the numeric data is being coerced into a character type.

While the above code sufficiently solves my problem, the note implies that date formatting should not be handled in this way (via type conversion).

1

1 Answers

4
votes

Use the mdy() function:

date = mdy(month, 1, year)