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

I need to test some date logic I am using for creating date variables and we have specific scenarios if it is Sunday and the 1st day of the month.

 

If I want to test each day but I need to know how do I override the system values for weekday and day to test my logic?

 

here is what my logic looks like:

data _null_;

if weekday(date()) = 1 then do; /* weekday = sunday */ /* code should not run on sundays unless it is Sat EOM */

                if day(date()) ^= 1 then do; /* day of month not the 1st day of the month */ /* code should not run on sundays unless it is Sat EOM */

                                wod2 = date()-1;

                                wod1 = date()-2;

                end;

/* Saturday EOM processing - Code should run on Sunday if it is the 1st day of the month - pick up Saturday file (-1) */

                else do;

                                wod2 = date()-1;

                                wod1 = date()-2;

                end;

end;

/* if monday and the 2nd of the month, code should not run because there is no sunday file due to SAT EOM Batch */

if weekday(date()) = 2 then do;  /* weekday = Monday */

                 if day(date()) ^= 2 then do;  /* day of month not the 2nd day of the month */ /* BAU Monday pull -1(Sunday) and -3(Friday) files */

                                wod2 = date()-1;

                                wod1 = date()-3;

                end;

                else do;  /* if is monday and the 2nd of the month, code should not run */

                                wod2 = date()-2;

                                wod1 = date()-3;

                end;

end;

/* if tuesday and the 3rd of the month, after no run monday 2nd of month, code should pull for Monday(-1) and Sunday(-2) */

if weekday(date()) = 3 then do;  /* weekday = Tuesday */

                 if day(date()) ^= 3 then do;  /* day of month not the 3rd day of the month - then just -1 */

                                wod2 = date()-1;

                                wod1 = date()-2;

                end;

                else do;  /* if is the 3rd then -1 and -3 */

                                wod2 = date()-1;

                                wod1 = date()-3;

                end;

end;

/* BAU Processing *//* any other day of the week will pull  dates previous days(-1) and (-2)*/

if weekday(date()) > 3 then do;

                                wod2 = date()-1;

                                wod1 = date()-2;

end;

CALL SYMPUT ("wod2",put(wod2,YYMMDDN8.));

CALL SYMPUT ("wod1",put(wod1,YYMMDDN8.));

run;

%put &wod1;

%put &wod2;

 

can you override those system values?

 

Thanks,

Elliott

1 ACCEPTED SOLUTION

Accepted Solutions
ballardw
Super User

One way would be to replace all of the DATE() calls with a macro reference. such as

if weekday(&dd) = 1

Then before the code define the macro variable as:

%let dd = %sysfunc(date());

Then when you want to use a specific date use something like
%let dd = "01JAN2023"d; (or any of a number of ways to set a date value .

Look a calendar for likely dates to have the day of week/ day of month as you want to test.

 

I don't really know what you mean by "override" the WEEKDAY though. It is a function. Given a value that is a date it returns the weekday. Any other behavior would be pretty detrimental to code.

View solution in original post

2 REPLIES 2
ballardw
Super User

One way would be to replace all of the DATE() calls with a macro reference. such as

if weekday(&dd) = 1

Then before the code define the macro variable as:

%let dd = %sysfunc(date());

Then when you want to use a specific date use something like
%let dd = "01JAN2023"d; (or any of a number of ways to set a date value .

Look a calendar for likely dates to have the day of week/ day of month as you want to test.

 

I don't really know what you mean by "override" the WEEKDAY though. It is a function. Given a value that is a date it returns the weekday. Any other behavior would be pretty detrimental to code.

Elliott
Obsidian | Level 7

Thank you this is exactly what I was looking for.

 

Cheers

Elliott

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

Register now!

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 2 replies
  • 297 views
  • 0 likes
  • 2 in conversation