【问题标题】:How to use macro variable with derived value in PROC SQL如何在 PROC SQL 中使用具有派生值的宏变量
【发布时间】:2016-07-04 09:04:58
【问题描述】:

我有一种情况,我需要为表名分配一个宏变量,该宏变量的值是从另一个宏变量派生的。

但是,宏中生成的代码使用的是推导公式,而不是推导值本身。

    %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?

谢谢

【问题讨论】:

标签: sas


【解决方案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

【讨论】:

  • 是的,似乎成功了。需要阅读更多关于宏功能的信息。谢谢!
  • 宏变量存储为文本字符串,因此 SAS 无法识别 %let 语句中的任何计算,除非使用宏函数。我不确定为什么你有变量 k 和 opp,因为它们具有相同的值(除非这纯粹是为了示例目的)。您可以输入%let k=%eval(&n-1) 得到相同的答案
  • 请注意,如果您不执行整数运算,则需要SYSEVALF
猜你喜欢
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 2015-10-21
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多