【问题标题】:Composing a SQL statement with SAS MACRO code, using %put and cats使用 %put 和 cat 编写带有 SAS MACRO 代码的 SQL 语句
【发布时间】:2015-04-17 01:49:05
【问题描述】:

我想编写一个宏来运行附加 10 个查询的结果,我使用 SAS 宏代码生成这些查询。

%MACRO APPENDTEST;
    PROC SQL;
        %DO I = 1 %TO 12
            CREATE TABLE WORK.APPENDTEST AS
            SELECT t1.OrderID, t2.Name, t3.Product, t1.Date, t1.Units
            FROM DVJAYESH.CANDY_SALES_HISTORY t1, 
                 DVJAYESH.CANDY_PRODUCTS t3, 
                 DVJAYESH.CANDY_CUSTOMERS t2
            WHERE (t1.ProdID = t3.ProdID AND t1.Customer = t2.CustID)
            AND t1.Date BETWEEN CATS('01', %PUT(CATS(&I), $MTH_NAME.), '2003')D AND 
                            CATS('31', %PUT(CATS(&I), $MTH_NAME.), '2003')D
            ORDER BY t1.Date, t2.Name, t3.Product;
        %END;
    QUIT;
%MEND APPENDTEST;

%APPENDTEST;

我收到多个错误。第一个是-A character operand was found in the %EVAL function or %IF condition where a numeric operand is required.

请解释并纠正。

仅供参考:我对 SAS 编程非常陌生。我使用 SAS 企业指南

【问题讨论】:

  • 好的修复了问题 #1,即我在 DO 语句的末尾缺少一个分号。现在的问题是 - 宏关键字 PUT 显示为文本。
  • 修复了第二个问题。删除了 PUT 函数的 % 符号。 %PUT 用于将文本或宏变量信息写入 SAS 日志。现在我收到多个错误 - 语法错误,期待以下之一:!!、*、**、+、-、/、AND、||。在 Where 子句的代码中 D 所在的位置。
  • 如果您是 SAS 编程新手:不要从宏开始。首先学习 SAS 编程。宏语言不是你应该做大部分工作的地方。 SAS 有更好的工具来完成上述没有宏的事情。
  • 不管怎样,上面的问题在这里并不适用。如果您对某事物的工作原理有特定的疑问,请提出问题,但我们不会仅仅对有很多问题的查询进行一般调试。
  • 我没有仔细看这个,但是更简单的条件不会是:year(t1.date)=2003 and month(date)=&I.?此外,您需要将&I 放在表名中,否则每次运行时它都会覆盖相同的数据集。

标签: sas sas-macro proc-sql


【解决方案1】:

您的宏将创建 work.appendtest 12 次。每次重写前一个副本。您可以尝试将 create 语句放在 do 循环之前。 我更喜欢稍微不同的方法。

%Macro apendtest;

  delete data = appendtest; /* you will get a warning if it doesn't exist;*/
  %do i = 1 %to 12;
     proc sql;
          create table temp as
             select ......
             from...........
             where ..........
     quit;
     proc append base = appendtest data = temp; run;
  %end;

%Mend appendtest;

如果您想查看每个临时表,请使用 temp&i

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 2020-08-16
    • 2017-12-02
    • 2018-04-18
    • 2012-10-18
    • 2013-07-07
    相关资源
    最近更新 更多