我需要在SAS中调用proc sql中的宏代码,如下所示。
PROC SQL;
CONNECT TO DB2 (SSID = &DGSYS);
CREATE TABLE <DS_NAME> AS
SELECT * FROM CONNECTION TO DB2
(
SELECT * FROM <TAB_NAME> WHERE...
);
%MACRO_CODE(....) --> am calling a macro block of code here
DISCONNECT FROM DB2;
QUIT;
但是这会引发错误。这可不行吗?
当我在查询中使用宏变量时,它允许我但不是对宏代码的调用。
宏将创建另一个宏变量,该变量将是一个IN CLAUSE,其中包含先前创建的表/数据集中的值。然后它将在另一个CREATE TABLE中使用...在同一个PROC SQL中。
答案 0 :(得分:1)
如果我理解正确的话,听起来像你正在做的事情不需要宏。如果您正在创建一个包含数据集中值列表的宏变量,则可以使用INTO:子句。
proc sql noprint;
connect to db2 (ssid = &dgsys);
create table ds_name as
select * from connection to db2
( ... );
/* If VAR_NAME is numeric, this works */
select distinct var_name
into: listvals
separated by " "
from ds_name;
/* If VAR_NAME is character, do this instead */
select distinct cats("'",varname,"'")
into: listvals
separated by " "
from ds_name;
create table new_ds as
select *
from another_ds
where var_name in (&listvals);
disconnect from db2;
quit;
我希望有所帮助。