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.
Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.
Register today!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.
Select SAS Training centers are offering in-person courses. View upcoming courses for: