我正在尝试自动执行SAS中的预定事件,以便在SAS程序打开时首先运行通过查询以创建本地表。我希望此查询继续循环运行,直到该表的观察计数大于0。我的想法是,我需要等待数据源的确认表已经准备好,然后才能向服务器运行其他代码,该宏将在宏之后执行。每次桌子没有任何观察时,我也希望它睡10分钟。
我的ODBC连接...
proc sql;
connect to odbc(datasrc="SSDM");
EXECUTE ( Create Volatile Table DataReady as
(
SQL...
) WITH DATA ON COMMIT PRESERVE ROWS;) by ODBC;
CREATE TABLE DataReady AS SELECT * FROM CONNECTION TO ODBC ( SELECT * FROM DataReady );
DISCONNECT FROM odbc;
quit;
,还包括睡眠功能...
data _null_;
rc=SLEEP(600);
run;
答案 0 :(得分:1)
将其细分为关键组成部分
4需要宏代码(因此,下面的宏包装器LOOPER
),2和3是PROC / DATASTEP,而1可能是两者。
%MACRO LOOPER ; %LET OBS = 0 ; /* #1 */ %DO %WHILE (&OBS = 0) ; /* run everything inside this %DO %WHILE loop whilst 0 obs - #4 */ /* put your existing SQL code here - #2 */ proc sql ; select count(1) into :OBS from DataReady ; quit ; /* #3 */ %IF &OBS = 0 %THEN %LET S = %SYSFUNC(sleep(10,60)) ; /* sleep for 10 minutes if 0 obs */ %END ; %MEND ; %LOOPER ;