在SAS中调用PROC SQL中的宏

时间:2013-07-11 13:25:01

标签: sas

我需要在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中。

1 个答案:

答案 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;

我希望有所帮助。