如何连接字符串和数字 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 ;
所以我有如下代码
%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 ;