MACRO help

Accepted Solution Solved
Reply
New Contributor
Posts: 2
Accepted Solution

MACRO help

Hi, I am trying to run a MACRO step to output multiple datasets based on the dates.  However, I can't seem to figure out how to mend the dates and create unique table names: 

 

%macro duo(rptmth);
proc sql;
create table P&rptmth as select * from dataset
where reportdate GE intnx('month',&rptmth.d,-12) and reportdate LT intnx('month',&rptmth.d,1)
quit;
%mend duo;
%duo('01Sep2015');
%duo('01May2015');

 

Thanks,

Jeff


Accepted Solutions
Solution
‎10-01-2016 10:27 PM
Super User
Posts: 5,366

Re: MACRO help

[ Edited ]

If you were to include this statement as part of your program, you would immediately recognize that it won't work:

 

create table P'01Sep2015' as ...

 

That's all macro langauge is doing ... substituting text in order to generate the programming statements.  While you do require quotes for the date literals, you can't include them as part of the table names.  Instead, try calling the macro without quotes:

 

%duo (01Sep2015)

 

To make that work, you would have to add quotes for the date literals:

 

%macro duo(rptmth);
proc sql;
create table P&rptmth as select * from dataset
where reportdate GE intnx('month',"&rptmth."d,-12) and reportdate LT intnx('month',"&rptmth."d,1)
quit;
%mend duo;

 

Use double quotes, not single quotes, around macro variable references.  That's a requirement to permit macro language to resolve the values.

View solution in original post


All Replies
Solution
‎10-01-2016 10:27 PM
Super User
Posts: 5,366

Re: MACRO help

[ Edited ]

If you were to include this statement as part of your program, you would immediately recognize that it won't work:

 

create table P'01Sep2015' as ...

 

That's all macro langauge is doing ... substituting text in order to generate the programming statements.  While you do require quotes for the date literals, you can't include them as part of the table names.  Instead, try calling the macro without quotes:

 

%duo (01Sep2015)

 

To make that work, you would have to add quotes for the date literals:

 

%macro duo(rptmth);
proc sql;
create table P&rptmth as select * from dataset
where reportdate GE intnx('month',"&rptmth."d,-12) and reportdate LT intnx('month',"&rptmth."d,1)
quit;
%mend duo;

 

Use double quotes, not single quotes, around macro variable references.  That's a requirement to permit macro language to resolve the values.

New Contributor
Posts: 2

Re: MACRO help

Thank you!
☑ This topic is solved.

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

Discussion stats
  • 2 replies
  • 290 views
  • 1 like
  • 2 in conversation