Afiq Johari
Afiq Johari

Reputation: 1462

How to use macro variable in datalines?

%let stmDate = 05FEB2017;
%let stmDueDate = %sysfunc(intnx(day,"&stmDate"d,20),date9.);

data header;
    input  statement_date date7.
         statement_due_date date7.;
    format statement_date date7.
         statement_due_date date7.;
    datalines;
    &stmDate &stmDueDate
run;

How can I resolve the macro variable within the datalines?

Upvotes: 1

Views: 5077

Answers (1)

Tom
Tom

Reputation: 51566

SAS will not expand macro code in DATALINES. Note that there is no need in your example program. Just use the macro variables to generate the code needed to set your dataset variables.

data header;
  statement_date = "&stmDate"d;
  statement_due_date = "&stmDueDate"d ;
  format statement_date statement_due_date date9.;
run;

But if you did want to do this then take a look at PROC STREAM to convert the resolved lines into a file and then read from that file.

So create your macro variables.

%let stmDate = 05FEB2017;
%let stmDueDate = %sysfunc(intnx(day,"&stmDate"d,20),date9.);

Then use PROC STREAM to convert them into a data file. You could even have you macro function call.

filename text temp;

proc stream outfile=text; begin
&stmDate &stmDueDate
&stmDate %sysfunc(intnx(day,"&stmDate"d,20),date9.)
;;;;

Then read from the generated file. In general it will remove the line breaks so you might want to use @@ in your INPUT statement.

data header;
  infile text ;
  input statement_date statement_due_date @@ ;
  format _numeric_ date9.;
  informat _numeric_ date9.;
run;

Upvotes: 1

Related Questions