【问题标题】:How to pause Execution in SAS for milliseconds如何在 SAS 中暂停执行几毫秒
【发布时间】:2022-07-13 17:41:11
【问题描述】:

如何在 SAS 中暂停执行 5 毫秒?

我可以使用\"CALL SLEEP (0.005)\"吗

我已经检查了下面的链接,但它令人困惑

https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.2/lefunctionsref/n12ppys43orawkn1q0oxep4cmdk6.htm

  • 请证明你正在使用它。

标签: sas sas-macro


【解决方案1】:

下面将在 SAS 中停止执行 5 毫秒。

data _null_;
    call sleep(5);
run;

您可以使用可选的unit 参数以秒为单位指定时间单位,适用于n.默认值为 .001(毫秒)。如果您愿意,可以将其更改为秒

data _null_;
    call sleep(0.005,1);
run;

以上等价于前者。

【讨论】:

  • 为了进行测试,我在插入时间戳之前使用了 call sleep (10000,.001) ==> 10 秒,但插入发生在 20 秒之后。如果您看到时间戳差异 2022-07-14-12.18,每条记录需要 20 秒.21.075490 2022-07-14-12.18.41.172490、2022-07-14-12.19.01.312540、2022-07-14-12.19.41.467410、2022-07-14-12.19.21.410270
【解决方案2】:

有时尝试一下比谷歌更好:

data try_to_get_some_sleep;
    format n unit z5.3 evening morning expect measure time18.9 diff percent7.2;
    do unit = 5, 1, .5, .1, .01, .001;
        do n = .1, .9, 1.1, 1.9, 2 ;
            expect = n * unit;
            evening = time();
            call sleep (n, unit);
            morning = time();
            measure = morning - evening;
            diff = (measure - expect) / expect;
            output;
        end;
    end;
run;

结果是

n       unit    evening             morning             expect              measure             diff
0.100   5.000   10:45:05.983414888  10:45:06.483422041  0:00:00.500000000   0:00:00.500007153   0.00%
0.900   5.000   10:45:06.483437061  10:45:10.984707117  0:00:04.500000000   0:00:04.501270056   0.03%
1.100   5.000   10:45:10.984720945  10:45:16.485454082  0:00:05.500000000   0:00:05.500733137   0.01%
1.900   5.000   10:45:16.485466003  10:45:25.984838009  0:00:09.500000000   0:00:09.499372005   (0.01%)
2.000   5.000   10:45:25.984853983  10:45:35.988686085  0:00:10.000000000   0:00:10.003832102   0.04%
0.100   1.000   10:45:35.988715887  10:45:36.088612080  0:00:00.100000000   0:00:00.099896193   (0.10%)
0.900   1.000   10:45:36.088624954  10:45:36.988639116  0:00:00.900000000   0:00:00.900014162   0.00%
1.100   1.000   10:45:36.988765001  10:45:38.089132071  0:00:01.100000000   0:00:01.100367069   0.03%
1.900   1.000   10:45:38.089145899  10:45:39.989645004  0:00:01.900000000   0:00:01.900499105   0.03%
2.000   1.000   10:45:39.989659071  10:45:41.989659071  0:00:02.000000000   0:00:02.000000000   0.00%
0.100   0.500   10:45:41.989671946  10:45:42.038803101  0:00:00.050000000   0:00:00.049131155   (1.74%)
0.900   0.500   10:45:42.038815975  10:45:42.488348961  0:00:00.450000000   0:00:00.449532986   (0.10%)
1.100   0.500   10:45:42.488362074  10:45:43.038013935  0:00:00.550000000   0:00:00.549651861   (0.06%)
1.900   0.500   10:45:43.038027048  10:45:43.987673044  0:00:00.950000000   0:00:00.949645996   (0.04%)
2.000   0.500   10:45:43.987685919  10:45:44.987751007  0:00:01.000000000   0:00:01.000065088   0.01%
0.100   0.100   10:45:44.987765074  10:45:44.996871948  0:00:00.010000000   0:00:00.009106874   (8.93%)
0.900   0.100   10:45:44.996876955  10:45:45.085994005  0:00:00.090000000   0:00:00.089117050   (0.98%)
1.100   0.100   10:45:45.086005926  10:45:45.195319891  0:00:00.110000000   0:00:00.109313965   (0.62%)
1.900   0.100   10:45:45.195332050  10:45:45.384675980  0:00:00.190000000   0:00:00.189343929   (0.35%)
2.000   0.100   10:45:45.384690046  10:45:45.585688114  0:00:00.200000000   0:00:00.200998068   0.50%
0.100   0.010   10:45:45.585701942  10:45:45.585707903  0:00:00.001000000   0:00:00.000005960   (99.4%)
0.900   0.010   10:45:45.585709095  10:45:45.595653057  0:00:00.009000000   0:00:00.009943962   10.5%
1.100   0.010   10:45:45.595659971  10:45:45.607652903  0:00:00.011000000   0:00:00.011992931   9.03%
1.900   0.010   10:45:45.607661009  10:45:45.626678944  0:00:00.019000000   0:00:00.019017935   0.09%
2.000   0.010   10:45:45.626689911  10:45:45.646678925  0:00:00.020000000   0:00:00.019989014   (0.05%)
0.100   0.001   10:45:45.646688938  10:45:45.646688938  0:00:00.000100000   0:00:00.000000000   ( 100%)
0.900   0.001   10:45:45.646689892  10:45:45.646689892  0:00:00.000900000   0:00:00.000000000   ( 100%)
1.100   0.001   10:45:45.646691084  10:45:45.647506952  0:00:00.001100000   0:00:00.000815868   (25.8%)
1.900   0.001   10:45:45.647507906  10:45:45.647620916  0:00:00.001900000   0:00:00.000113010   (94.1%)
2.000   0.001   10:45:45.647623062  10:45:45.650509119  0:00:00.002000000   0:00:00.002886057   44.3%

【讨论】:

  • 你怎么看diff的来源?
【解决方案3】:

您可以使用 %SYSCALL SLEEP(...%SYSFUNC(SLEEP(... 在步骤之间直接挂起 SAS 会话注意:使用%SYSCALL 时,您需要将宏变量作为参数传递,而不是数字文字文本.

例子:

%let duration = 5;
%let unit = 0.001;

data one; set sashelp.class; run;
%syscall sleep(duration,unit);
data two; set sashelp.cars; run;

或者

data one; set sashelp.class; run;
%let rc = %sysfunc ( sleep ( 5, 0.001 ));
data two; set sashelp.cars; run;

【讨论】:

    最近更新 更多