SAS宏循环直到obs计数>;0
我试图在SAS中自动执行一个计划的事件,这样当SAS程序打开时,它会首先运行一个传递查询,创建一个本地表。我希望此查询在循环中持续运行,直到该表的观察计数>0。我的想法是,我需要等待来自数据源的确认,即表已经准备好,然后才能向服务器运行附加代码,这将在宏之后执行。我还想让它在每次表上没有显示任何观察结果时睡眠10分钟 我的ODBC连接SAS宏循环直到obs计数>;0,sas,sas-macro,Sas,Sas Macro,我试图在SAS中自动执行一个计划的事件,这样当SAS程序打开时,它会首先运行一个传递查询,创建一个本地表。我希望此查询在循环中持续运行,直到该表的观察计数>0。我的想法是,我需要等待来自数据源的确认,即表已经准备好,然后才能向服务器运行附加代码,这将在宏之后执行。我还想让它在每次表上没有显示任何观察结果时睡眠10分钟 我的ODBC连接 proc sql; connect to odbc(datasrc="SSDM"); EXECUTE ( Create Volatile Table Data
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;
将其分解为关键部件
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 ;
%宏活套;
%设OBS=0;/*#1 */
%执行%WHILE(&OBS=0);/*在0 obs-#4循环时运行此%DO%中的所有内容*/
/*将现有SQL代码放在此处-#2*/
proc-sql;选择计数(1)进入:OBS from DataReady;退出;/*#3 */
%如果&OBS=0%,则%LET S=%SYSFUNC(sleep(10,60));/*如果0 obs,则睡眠10分钟*/
%结束;
%修补;
%活套;
嗨,克里斯,谢谢你,我想这对我想做的事情非常有效!