Sas 如何在数据行中使用宏变量?

Sas 如何在数据行中使用宏变量?,sas,sas-macro,Sas,Sas Macro,如何解析数据行中的宏变量?SAS不会在数据行中展开宏代码。请注意,在示例程序中不需要。只需使用宏变量生成设置数据集变量所需的代码 %let stmDate = 05FEB2017; %let stmDueDate = %sysfunc(intnx(day,"&stmDate"d,20),date9.); data header; input statement_date date7. statement_due_date date7.; format

如何解析数据行中的宏变量?

SAS不会在
数据行中展开宏代码。请注意,在示例程序中不需要。只需使用宏变量生成设置数据集变量所需的代码

%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;
data header;
  statement_date = "&stmDate"d;
  statement_due_date = "&stmDueDate"d ;
  format statement_date statement_due_date date9.;
run;
但如果您确实想这样做,请查看
PROC STREAM
,将解析的行转换为文件,然后从该文件中读取

因此,创建宏变量

%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;
data header;
  statement_date = "&stmDate"d;
  statement_due_date = "&stmDueDate"d ;
  format statement_date statement_due_date date9.;
run;
然后使用PROC STREAM将它们转换为数据文件。您甚至可以调用宏函数

%let stmDate = 05FEB2017;
%let stmDueDate = %sysfunc(intnx(day,"&stmDate"d,20),date9.);
然后从生成的文件中读取。通常,它会删除换行符,因此您可能希望在输入语句中使用
@

filename text temp;

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