0

我需要从 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。随后将在同一 PROC SQL 中的另一个 CREATE TABLE... 中使用它。

4

1 回答 1

2

如果我理解正确,听起来你正在做的事情不需要宏。如果您要创建一个包含数据集中值列表的宏变量,则只需使用 INTO: 子句。

ds_name :带有数字和字母数字变量的表。

    proc sql noprint;

        /* 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);

   quit;

我希望这会有所帮助。

于 2013-11-18T20:50:40.990 回答