DATA Step, Macro, Functions and more

unquoting macro var in stored process

Accepted Solution Solved
Reply
SAS Employee
Posts: 13
Accepted Solution

unquoting macro var in stored process

within testit macro i want macro variables to be resolved and the outfile name to be generated as sasuser05AUG11_Test's

one way to force the resolution is to use %unquote , %unquote works if the oname does not contain the single quote

Any suggestions to make it work with oname having single quote or any other quoted character as well ?

%macro testit(outputlocation, outputname);

%let outfile=&outputlocation/&outputname;

%put &outfile;

%mend;

%let _metauser=sasuser;

%let oname=%str(&)_metauser.%str(&)SYSDATE._Test%str(%')s;

%put This is how values are passed into the stored process: &oname;

%let oloc=c:\mysas;

%testit(&oloc, &oname); 


Accepted Solutions
Solution
‎08-05-2011 07:24 AM
Respected Advisor
Posts: 3,799

Re: unquoting macro var in stored process

Posted in reply to DataShare

Are you coding for full job security?

BQUOTE will quote an unmatched un-escaped single quote.

I usually macro variables in %PUT.

%macrotestit (outputlocation, outputname);

   %letoutfile =&outputlocation/&outputname;

   %put& outfile;

   %mend;

%let_ metauser=sasuser;

%letoname =% str(&)_ metauser.%str(&) SYSDATE._Test% str(%') s;

%letoname =% nrbquote(%unquote(& oname));

%put This is how values are passed into the stored process: % superQ( oname);

%letoloc=c:\mysas;

%testit(&oloc, &oname); 

I would change the date format to YYYYMMDD so the filenames will sort in a more pleasing order.

%let oname=%str(&)_metauser.%sysfunc(today(),yymmddn8.)_Test%str(%')s;

View solution in original post


All Replies
Solution
‎08-05-2011 07:24 AM
Respected Advisor
Posts: 3,799

Re: unquoting macro var in stored process

Posted in reply to DataShare

Are you coding for full job security?

BQUOTE will quote an unmatched un-escaped single quote.

I usually macro variables in %PUT.

%macrotestit (outputlocation, outputname);

   %letoutfile =&outputlocation/&outputname;

   %put& outfile;

   %mend;

%let_ metauser=sasuser;

%letoname =% str(&)_ metauser.%str(&) SYSDATE._Test% str(%') s;

%letoname =% nrbquote(%unquote(& oname));

%put This is how values are passed into the stored process: % superQ( oname);

%letoloc=c:\mysas;

%testit(&oloc, &oname); 

I would change the date format to YYYYMMDD so the filenames will sort in a more pleasing order.

%let oname=%str(&)_metauser.%sysfunc(today(),yymmddn8.)_Test%str(%')s;

🔒 This topic is solved and locked.

Need further help from the community? Please ask a new question.

Discussion stats
  • 1 reply
  • 120 views
  • 1 like
  • 2 in conversation