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.
Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!
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.