Whilst you have an answer to your problem, I would like to put some points in. I don't see any reason given here why load_day should be a macro variable - it is numeric date data so text based macro variable is not a good storage medium for that data, or why this code given here is put in a macro at all. Macro language is a method for generating Base SAS code, it doesn nothing else. Base SAS code is there to process and manipulate data. All that happens when Base SAS code is forced into Macro language is that the code becomes obfuscated. Take your problem for instance, it is a simple task of checking if the week day of a date is a weekend, and if so returning Friday, otherwise the day. You have compounded this simple problem by first putting a date into a text macro variable - thus you need additional code to process that back into a usable format. Now look at the equivalent statement if your date is stored in a dataset in a strcuture which is designed to handle "data" elements:
data have;
load_day="12May2016"d;
last=ifn(weekday(load_day) in (1,7),6,weekday(load_day)-1);
run;
Simpler, doesn't require working out what is being done.
... View more