Does anyone know a way to convert the MS Access iif function to a case statement *in bulk*?
I'm converting Access apps to SAS and found one with dozens of iif statements and I thought it would be 'fun' (sick, yes, I know) to try to come up with a way to take this:
IIf(MEPE_ELIG_IND="Y",MEME_LAST_NAME,Null)
and write a macro so that I could simply do this:
%IIf(MEPE_ELIG_IND="Y",MEME_LAST_NAME,Null)
that would convert that to
case when MEPE_ELIG_IND="Y" then MEME_LAST_NAME else Null end
I thought I'd be clever and just come up with something like this:
%macro iif(condition,true,else);
case when &condition then &true else &else end
%mend iif;
But, of course, SAS considers MEPE_ELIG_IND="Y" to be passing a value to the macro variable MEPE_ELIG_IND instead of a whole value for variable &condition.
Just wondered if anybody had ideas for this.
Why not just use the IFN() or IFC() functions instead of making a macro?
Either include the parameter name in the call:
%IIf(CONDITION=MEPE_ELIG_IND="Y",MEME_LAST_NAME,Null)
Or add parentheses around the condition.
%IIf((MEPE_ELIG_IND="Y"),MEME_LAST_NAME,Null)
Or both.
Why not just use the IFN() or IFC() functions instead of making a macro?
Since
%IIf(MEPE_ELIG_IND="Y",MEME_LAST_NAME,Null)
takes longer to write than
ifc(MEPE_ELIG_IND="Y",MEME_LAST_NAME,"")
I really see no value in creating a macro.
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
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.
Ready to level-up your skills? Choose your own adventure.