DATA Step, Macro, Functions and more

Converting 01JAN2008 (format: Date9.) to Year (2008)

Reply
Occasional Contributor
Posts: 16

Converting 01JAN2008 (format: Date9.) to Year (2008)

Hi everyone, 

 

I want to convert a date variable with the following formatting 01JAN2008 (the format is Date9.)  to a date variable of year only (i.e. 2008). 

 

Could you please provide some guidance on the syntax to do that? 

 

Thanks in advance! 

Trusted Advisor
Posts: 1,270

Re: Converting 01JAN2008 (format: Date9.) to Year (2008)

Posted in reply to Jack_Smitherson

Hi,

 

Something like this?

 

data have;
d = '01JAN2008'd;
format d date9.;
year=year(d);
run;

Super User
Posts: 22,874

Re: Converting 01JAN2008 (format: Date9.) to Year (2008)

Posted in reply to Jack_Smitherson

You have a few options. 

 

1. Convert it to a numerical variable, which is basically the year function

 

myDate = '01Jan2008'd;

myYear = year(myDate);

2. You can use a format instead to change the appearance. PROC MEANS/FREQ/SUMMARY will respect the format, PROC SQL will not. This changes how the variable is display but not the underlying data.

 

format myDate year4.;

3. You can do a combination of 1/2, supposing you wanted it as year but in a different variable.

 

myYear = myDate;
format myYear year4.;

 

Occasional Contributor
Posts: 16

Re: Converting 01JAN2008 (format: Date9.) to Year (2008)

Thank you for your response. I do want to run some proc sql later on, so simply formatting the variable is not the most optimal option.

 

In the first option you gave me "Convert it to a numerical variable, which is basically the year function" - how can I go about applying that to 12 months (i.e. 01Jan2000, 1Feb2000, 01Mar2000, etc.) with five years worth of data? (i.e. 2000-2004; I have a combination of 01Jan2000, 01Jan2001, 01Jan2002, etc.). 

 

Thanks again! 

 

 

Super User
Posts: 22,874

Re: Converting 01JAN2008 (format: Date9.) to Year (2008)

Posted in reply to Jack_Smitherson

Jack_Smitherson wrote:

Thank you for your response. I do want to run some proc sql later on, so simply formatting the variable is not the most optimal option.

 

In the first option you gave me "Convert it to a numerical variable, which is basically the year function" - how can I go about applying that to 12 months (i.e. 01Jan2000, 1Feb2000, 01Mar2000, etc.) with five years worth of data? (i.e. 2000-2004; I have a combination of 01Jan2000, 01Jan2001, 01Jan2002, etc.). 

 

Thanks again! 

 

 


That depends on your data structure.  

Use the YEAR() function on the variable to obtain the YEAR. 

Ask a Question
Discussion stats
  • 4 replies
  • 208 views
  • 0 likes
  • 3 in conversation