【问题标题】:SAS macro loop until obs count >0SAS 宏循环直到 obs 计数 >0
【发布时间】:2019-04-20 01:59:36
【问题描述】:

我正在尝试自动化 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;

【问题讨论】:

    标签: sas sas-macro


    【解决方案1】:

    将其分解为关键组成部分

    1. 将初始观察次数计数器设置为 0
    2. 执行您的查询
    3. 检查obs数量
    4. 如果为零,则休眠然后循环回到#2

    4 需要宏代码(因此下面的宏包装器 LOOPER),2 和 3 是 PROC / DATASTEP,1 可以是任何一个。

    %宏循环; %LET OBS = 0 ; /* #1 */ %DO %WHILE (&OBS = 0) ; /* 在 0 obs - #4 时运行这个 %DO %WHILE 循环中的所有内容 */ /* 把你现有的 SQL 代码放在这里 - #2 */ 过程 sql ;从 DataReady 中选择 count(1) 到 :OBS ;放弃 ; /* #3 */ %IF &OBS = 0 %THEN %LET S = %SYSFUNC(sleep(10,60)) ; /* 如果 0 obs 则睡眠 10 分钟 */ %结尾 ; %修复; %循环;

    【讨论】:

    • 嗨,克里斯,谢谢你,我认为这非常适合我想做的事情!
    猜你喜欢
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多