如何在 SAS 的宏 %do 语句中使用 time8 格式引用时间?

问题描述 投票:0回答:1

我有一个使用 time8 格式存储当前时间的变量,并且我希望运行宏,除非当前时间晚于下午 1:00,例如:

%let time_now=%sysfunc(time(),time8.);

%macro find;
    %do %until (&time_now. gt '13:00:00't);
    {Some Code here}
    %end;

%if &time_now gt '13:00:00't %then %do;
    %put WARNING: The file has not yet appeared and it is after 1pm;
    %abort cancel;
%end;
%mend find;
%find;

我见过“13:00:00”在数据步骤中不起作用的示例,但它在这里似乎对我不起作用。我用什么来代替它? (注意:我希望它类似于 time8. 格式,而不是 SAS 时间,我知道它是 46,800,但对于所指的时间不太清楚。而且我很顽固,想弄清楚这一点出来。)

当我尝试“13:00:00”时,它不会说我已经过了分配的时间,但这不是真的,因为它是在下午 1 点之前。当我尝试 46,800 时,它按预期运行,所以我知道这不是时区问题。我也尝试过使用双引号,因为它在宏中,但这也不起作用。

time sas macros
1个回答
0
投票

使用

%SYSEVALF
计算特殊文字。

%do %until ( %sysfunc(time()) > %sysevalf('13:00:00't) );
© www.soinside.com 2019 - 2024. All rights reserved.