DATA Step, Macro, Functions and more

Macro quoting functions

Reply
Contributor
Posts: 50

Macro quoting functions

Hello All

I have the following code and trying to extract first word (QTcF) how can i achieve this?

data x;

input seq param $ 2-80;

datalines;

1 QTcB - Bazett's Correction Formula (msec)

;

run;

data y;

set x;

call symput ("param", cats(param));

run;

%put &param;  ( this is not resolved in log)

When i am doing the following way i get an error in the log

%let x = %scan("&param",1,-));

%put &x;

ERROR: Open code statement recursion detected.

Trusted Advisor
Posts: 1,137

Re: Macro quoting functions

Posted in reply to SASSLICK001

First issue is that you are unable to create a macro variable where the value has a unbalanced quote. To avoid this you need to try the following code

data y;

set x;

call symputx('param', quote(trim(param)));

run;

%put &param;

it will create the param macro variable with value. Then to get the QTCB please try

%let x = %substr(%qsysfunc(scan(&param,1,'-')),2);

%put &x;

First it will extract the QTCB and then it will remove the first quote by substr.

Please try and let me know if it was helpful.

Thanks,

Jag

Thanks,
Jag
PROC Star
Posts: 1,322

Re: Macro quoting functions

Posted in reply to Jagadishkatam

Actually it's okay to have an unmatched quote inside a macro variable, as long as you macro quote it when you use it.  The following should work:

%let x = %scan(%superq(param),1,-) ;

Worked for me on free SAS University Edition running on AWS. So cool to have that.  Thank you SAS.

--Q.

Ask a Question
Discussion stats
  • 2 replies
  • 211 views
  • 0 likes
  • 3 in conversation