I have been struggling with an issue.
Looking at the code below:
%put %scan(%str(arg1=A,arg2=B,arg3=C),1);
%let string = arg1=A,arg2=B,arg3=C;
%put %scan(%str(&string),1);
The first %put statement writes arg1=A in the log as expected.
The second %put statement gives a warning.
WARNING: Argument 2 to macro function %SCAN is out of range.
My question is:
How do I force the %put statement to first resolve the macro variable &string to arg1=A,arg2=B,arg3=C and then execute the %put statement?
this should work as
The %STR and %NRSTR functions mask a character string during compilation of a macro or macro language statement. They mask the following special characters and mnemonic operators:
to make it work during execution use %bquote
%put %scan(%str(arg1=A,arg2=B,arg3=C),1); /*complilation*/ %let string = %str(arg1=A,arg2=B,arg3=C); %put %scan(&string,1);
/*bquote During execution*/
%let string9 = arg1=A,arg2=B,arg3=C;
%put %scan(%bquote(&string9),1);
this should work as
The %STR and %NRSTR functions mask a character string during compilation of a macro or macro language statement. They mask the following special characters and mnemonic operators:
to make it work during execution use %bquote
%put %scan(%str(arg1=A,arg2=B,arg3=C),1); /*complilation*/ %let string = %str(arg1=A,arg2=B,arg3=C); %put %scan(&string,1);
/*bquote During execution*/
%let string9 = arg1=A,arg2=B,arg3=C;
%put %scan(%bquote(&string9),1);
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
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.