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.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.