I am trying to use a macro to parse some strings. This simplified code is supposed to find the rightmost underscore. However, the Index is resolved as zero:
%macro resolveindex;
%let thisvar = PriPrb_SUM;
%LET Index = %SYSFUNC(FIND("&ThisVar.","_",-33));
%mend;
Since I know that macro variables are always character, I tried this:
%LET Index = %SYSFUNC(PUT(FIND("&ThisVar.","_",-33),2.);
However, I get an error message that PUT function is unknown.
How do I get this to work?
%let thisvar = PriPrb_SUM; %LET Index = %SYSFUNC(FIND(&ThisVar.,_,-33)); %put &index.;
Quotes in macro calls to data step functions are usually not needed since the macro processor treats everything as character.
The function to examine a macro variable is %put.
If you want to use the data step Put functions with %sysfunc you need to use either PUTN or PUTC explicitly.
Note: if your Thisvar might have commas then you have another issue as it would be interpreted as a delimiter in the function call and you would need to use on of the macro quoting functions to have the comma ignored in the Find function.
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!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
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.