首页 > 解决方案 > SAS 网格启用

问题描述

我必须提取大量数据,并且我正在尝试网格化以使其运行得更快。不幸的是,我不是 SAS 编码员,所以我正在尝试修改现有代码。我在日志的 waitfor all部分中不断收到“%END 没有匹配的 %DO 语句”错误。我什至不确定这是否会起作用。

有人有网格经验可以帮助我吗?

%let _sdtm=%sysfunc(datetime());
%macro splitmonths(begmonth=,endmonth=);
%let rc=%sysfunc(grdsvc_enable(_all_,server=SASApp));
options autosignon;

%do imth=&begmonth %to &endmonth;
    signon t&imth;
    %syslput imth=&imth/remote=t&imth;
    rsubmit t&imth wait=no;
        PROC SQL;
        CREATE TABLE WORK.QUERY_FOR_VW_HOUPOSSW_FACT_&imth AS 
            SELECT t1.outletfamily, 
                t1.ppmonth, 
                t1.itemnumber, 
                /* Dollars */
                (SUM(t1.totalvalue)) FORMAT=DOLLAR20. AS Dollars
            FROM HOUPWP7.vw_houpossw_fact t1
            WHERE t1.ppmonth = &imth;
            GROUP BY t1.outletfamily,
                   t1.ppmonth,
                   t1.itemnumber;
        QUIT;
    endrsubmit;
%end

waitfor _all_
    %do imth=&begmonth %to &endmonth;
        t&imth
    %end;
    ;
signoff _all_;


data newdata;
    set
    %do imth=&begmonth %to &endmonth;
        newdata&imth
    %end;
    ;
run;

proc datasets lib=work;
    %do imth=&begmonth %to &endmonth;
        delete newdata&imth;
    %end
quit;
%mend splitmonths
%splitmonths (begmonth=541, endmonth=588)


%let _edtm=%sysfunc(datetime());
%let _runtm=%sysfunc(putn(&_edtm - &_sdtm, 12.4));
%put It took &_runtm second to run the program;enter code here

标签: sas

解决方案


%end尝试在语句开始之前添加分号来结束宏waitfor语句。

%end;

waitfor _all_

推荐阅读