Sas 如何在PROC SQL中使用具有派生值的宏变量
在这种情况下,我需要为表名分配一个宏变量,该宏变量的值派生自另一个宏变量 但是,宏中生成的代码使用的是派生公式,而不是派生值本身Sas 如何在PROC SQL中使用具有派生值的宏变量,sas,Sas,在这种情况下,我需要为表名分配一个宏变量,该宏变量的值派生自另一个宏变量 但是,宏中生成的代码使用的是派生公式,而不是派生值本身 %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;
%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呢
谢谢尝试使用%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
尝试使用%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
-你可以在这里读到关于%eval的信息-你可以在这里读到关于%eval的信息是的,似乎做到了这一点。需要阅读更多有关宏函数的内容。谢谢宏变量存储为文本字符串,因此SAS不会识别
%let
语句中的任何计算,除非使用宏函数。我不确定为什么有变量k和opp,因为它们取相同的值(除非这纯粹是为了示例目的)。你可以用%let k=%eval(&n-1)
来得到同样的答案只要注意,如果你不执行整数运算,你需要SYSEVALF
。是的,似乎可以做到这一点。需要阅读更多有关宏函数的内容。谢谢宏变量存储为文本字符串,因此SAS不会识别%let
语句中的任何计算,除非使用宏函数。我不确定为什么有变量k和opp,因为它们取相同的值(除非这纯粹是为了示例目的)。您可以放置%let k=%eval(&n-1)
以获得相同的答案。请注意,如果您不执行整数运算,则需要SYSEVALF