Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAS宏循环直到obs计数>;0_Sas_Sas Macro - Fatal编程技术网

SAS宏循环直到obs计数>;0

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

我试图在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
  • 执行您的查询
  • 检查OB的数量
  • 如果为零,则返回到#2
  • 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 ; %宏活套; %设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分钟*/ %结束; %修补; %活套;
    嗨,克里斯,谢谢你,我想这对我想做的事情非常有效!