0

我想编写一个宏来运行附加 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 企业指南

4

1 回答 1

0

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

%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

于 2015-10-06T19:12:23.363 回答