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.
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9.
Lock in the best rate now before the price increases on April 1.
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.