我有一种情况需要为表名指定一个宏变量,其值来自另一个宏变量。
但是,宏中生成的代码使用派生公式而不是派生值本身。
%macro testing;
%let n=2;
%let k=&n-1;
%let opp=&k;
PROC SQL;
CREATE TABLE WORK.TABLE_&opp AS
SELECT * from WORK.SOURCETABLE;
QUIT;
%mend;
%testing
这导致代码生成错误
NOTE: Line generated by the macro variable "OPP".
34 WORK.TABLE_2-1
_
22
200
ERROR 22-322: Syntax error,
但是我期望结果表将被命名为WORK.TABLE_1而不是WORK.TABLE_2-1。
那么我如何强制SAS识别变量opp = 1而不是opp = 2-1?
谢谢
答案 0 :(得分:2)
尝试使用%eval,如下所示:
%macro testing;
%let n=2;
%let k=&n-1;
%let opp=%eval(&k);
PROC SQL;
CREATE TABLE WORK.TABLE_&opp AS
SELECT * from WORK.SOURCETABLE;
QUIT;
%mend;
%testing