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

Hello, 

currently I pull in %let cdate=%sysfunc(putn("&sysdate9"d,YYMMDDD10.));

which displays 2023-01-30

 

what I would like to do is 

%if mo(&cdate) = 01 %then %let Quarter = Q1;

%if mo(&cdate) = 04 %then %let Quarter = Q2;

%if mo(&cdate) = 07 %then %let Quarter = Q3;

%if mo(&cdate) = 10 %then %let Quarter = Q4;

 

I keep running into errors. Any help is much appreciated! 

 

This can also refer to it as months of January, April, July, October, or abbreviations. I just need it to set Quarter based on Month

 

 

1 ACCEPTED SOLUTION

Accepted Solutions
Reeza
Super User

How about this instead:

 

 %let Quarter= Q%sysfunc(putn("&sysdate9"d,QTR.));

@ccaudillo100 wrote:

Hello, 

currently I pull in %let cdate=%sysfunc(putn("&sysdate9"d,YYMMDDD10.));

which displays 2023-01-30

 

what I would like to do is 

%if mo(&cdate) = 01 %then %let Quarter = Q1;

%if mo(&cdate) = 04 %then %let Quarter = Q2;

%if mo(&cdate) = 07 %then %let Quarter = Q3;

%if mo(&cdate) = 10 %then %let Quarter = Q4;

 

I keep running into errors. Any help is much appreciated! 

 

This can also refer to it as months of January, April, July, October, or abbreviations. I just need it to set Quarter based on Month

 

 


 

View solution in original post

4 REPLIES 4
Reeza
Super User

How about this instead:

 

 %let Quarter= Q%sysfunc(putn("&sysdate9"d,QTR.));

@ccaudillo100 wrote:

Hello, 

currently I pull in %let cdate=%sysfunc(putn("&sysdate9"d,YYMMDDD10.));

which displays 2023-01-30

 

what I would like to do is 

%if mo(&cdate) = 01 %then %let Quarter = Q1;

%if mo(&cdate) = 04 %then %let Quarter = Q2;

%if mo(&cdate) = 07 %then %let Quarter = Q3;

%if mo(&cdate) = 10 %then %let Quarter = Q4;

 

I keep running into errors. Any help is much appreciated! 

 

This can also refer to it as months of January, April, July, October, or abbreviations. I just need it to set Quarter based on Month

 

 


 

ccaudillo100
Obsidian | Level 7

Thank you! 🙂 

ballardw
Super User

You are using 1) an invalid function "MO", the function would be month:

2) attempting to use a datastep fuction in macro code incorrectly: MUST use %sysfunc to call ANY data step fuction

3) attempting to use a date function on a string value (2023-01-30), is not a valid date value. SAS dates are numbers of days since 01Jan1960 and the Cdate value is not a number of days.

 

One way to get you quarter value

%let quarter= Q%sysfunc(qtr(%sysfunc(today())));

%put &quarter.  ;

By using the letter Q immediately preceding the %sysfunc call then the function resolves the value is placed immediately after the Q So no %if %then %else code is required.

Note use of the QTR function. Your %if %then %else  completely ignores what happens in other months and as long as your quarter actually aligns with calendar quarters it would be better to use the function.

 

For any date, time or datetime values that you expect to use other functions with or comparisons to actual date, time or datetime values you should not format the macro variable.

Unless you need to know the start of a SAS session instead of the current date you might consider using the TODAY function instead of that putn with "&sysdate9"d

 

 

 

johnagalloway0
Fluorite | Level 6

OK - you probably don't need to do this in macro language at all - but assuming you do, the following addresses numerous issues:

 

johnagalloway0_0-1675098156608.pngjohnagalloway0_1-1675098215628.png

It is common to overthink use of macros (especially if you have just come across them) but I would achieve the same result using:

johnagalloway0_2-1675098854206.png

Good luck, Enjoy SAS.

hackathon24-white-horiz.png

The 2025 SAS Hackathon Kicks Off on June 11!

Watch the live Hackathon Kickoff to get all the essential information about the SAS Hackathon—including how to join, how to participate, and expert tips for success.

YouTube LinkedIn

Creating Custom Steps in SAS Studio

Check out this tutorial series to learn how to build your own steps in SAS Studio.

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
  • 4 replies
  • 1599 views
  • 4 likes
  • 4 in conversation