如何连接字符串和数字 SAS 宏并在 where 语句中使用它

How to concatenate string and numeric SAS Macro and use it in where statement

所以我有如下代码

%let THIS_YEAR=2020;

%macro programall;
%do i = 2016 %to &THIS_YEAR;

%let num2  =%eval(&i-2000);
%let xxx= CAT("MP",&num2);

data t_&i.;
set table1;
where GROUP in ("&xxx");
run;

%end;

例如

when i=2016
    num2 = 2016-2000;
    num2 = 16;

并尝试与“MP”连接,因此它应该创建 xxx=MP16。

并尝试在 where 语句中使用。

但它导致了错误。

如何正确创建像“MP16”这样的宏变量,以便在where子句中使用它?

谢谢

宏变量只是文本(不是字符串,是您输入内容中的文本)。所以要连接宏变量,只需将它们并排放置即可。

%let var1=Banana;
%let var2=Pepper;
%let var3=&var1. &var2.;

%put &=var3;

当然,您实际上不必使用第三个变量,您可以直接在代码中使用 "&var1. &var2." 或其他任何内容。

尝试

%let THIS_YEAR=2020;

%macro programall;
  %local year;

  %do year = 2016 %to &THIS_YEAR;
    data t_&year.;
      set table1;
      where GROUP in ("MP%eval(&year-2000)");
    run;
  %end;
%mend;

options mprint;
%programall

您不能在宏代码中使用函数,对于宏处理器而言,它们只是被视为任何其他文本。但是不需要使用函数来连接宏代码中的文本。只需在要使用它包含的文本的地方展开宏变量。

%let xxx= MP&num2 ;