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

My year field has been stored in character field of 25 length.

I want to convert this to date field with years.

I tried this code but the output is empty

data want;

set have;

date_sas=input(put(dateinchar, 4.), yymmdd8.);

format date_sas date 9.;

run;

1 ACCEPTED SOLUTION

Accepted Solutions
djbateman
Lapis Lazuli | Level 10

You will need to change the date format to what you want it to look like.  Instead of YYMMDD8. try YEAR. in its place:

data dates;

  length dateinchar $25;

  input dateinchar $;

  format dateinsas year.;

  dateinnum=input(dateinchar,4.);

  dateinsas=mdy(1,1,dateinnum);

  cards;

2004

2005

1999

;

run;

View solution in original post

6 REPLIES 6
djbateman
Lapis Lazuli | Level 10

Can you give an example (or two) of what DATEINCHAR looks like and what you want DATE_SAS to look like?

buckeyefisher
Obsidian | Level 7

dateinchar (this field is defined as character in the input file length - 25)

2004

2005

1999

dateinsas ( I want this to be defined as date field, length could be 4 digits)

2004

2005

1999

djbateman
Lapis Lazuli | Level 10

Does this help?  I converted the 4-digit character year into a 4-digit numeric year (DATEINNUM), but I also converted it into a SAS date (DATEINSAS) using the MDY() function where I assumed the month was January and the day was the 1st.  If you want a different month/day value, you can change those as you see fit.

data dates;

  length dateinchar $25;

  input dateinchar $;

  format dateinsas yymmdd8.;

  dateinnum=input(dateinchar,4.);

  dateinsas=mdy(1,1,input(dateinchar,4.));

  cards;

2004

2005

1999

;

run;

buckeyefisher
Obsidian | Level 7

Thanks, It doesn't work.

For example when input  = 2007 , it gives 07-01-01 whereas I want output = 2007 (but the field being defined as a date field)

djbateman
Lapis Lazuli | Level 10

You will need to change the date format to what you want it to look like.  Instead of YYMMDD8. try YEAR. in its place:

data dates;

  length dateinchar $25;

  input dateinchar $;

  format dateinsas year.;

  dateinnum=input(dateinchar,4.);

  dateinsas=mdy(1,1,dateinnum);

  cards;

2004

2005

1999

;

run;

buckeyefisher
Obsidian | Level 7

this worked. We dont need to convert this to numeric.

format dateinsas year.;

dateinsas=mdy(1,1,dateinchar);

Thanks!!!

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 6 replies
  • 1478 views
  • 0 likes
  • 2 in conversation