2017年6月2日金曜日

指定した時間プログラムを中断する「SLEEP関数 / CALL SLEEP」と落とし穴



「SLEEP関数」または「CALL SLEEP」で指定した時間だけ、呼び出し元のプログラムを中断出来ます。
ひとつずつ例をみていきましょう。



SLEEP関数


構文

   SLEEP(  中断する秒数 , 秒の単位  )


第2引数「秒の単位」の指定は省略しないこと!(理由は記事の最後に説明)


例)
  • SLEEP( 5 , 1 ) = 5秒
  • SLEEP( 5000 , 0.001 ) = 5秒
  • SLEEP( 1 , 5 ) = 5秒
  • SLEEP( 0.25 , 0.001 ) = 0秒 ← 設定ミスの例


使用例
data DT1;
  A=1;
run;

data _NULL_;
  rc = sleep(5,1);
run;

data DT2;
  A=2;
run;

データセットDT1を作った後、5秒SLEEPさせています。
5秒後に、続きのプログラム(データセットDT2を作る処理)が行われます。



CALL SLEEP


構文

   CALL SLEEP(  中断する秒数 , 秒の単位  )


第2引数「秒の単位」の指定は省略しないこと!(理由は記事の最後に説明)


例)
  • CALL SLEEP( 5 , 1 ) = 5秒
  • CALL SLEEP( 5000 , 0.001 ) = 5秒
  • CALL SLEEP( 1 , 5 ) = 5秒
  • CALL SLEEP( 0.25 , 0.001 ) = 0秒 ← 設定ミスの例


使用例
data DT1;
  A=1;
run;

data _NULL_;
  call sleep(5,1);
run;

data DT2;
  A=2;
run;

SLEEP関数の例と同様、途中で5秒プログラムを中断しています。



落とし穴


リファレンスに記載されていないので注意すべき点。
第2引数に設定する「秒の単位」は省略可ですが指定推奨です。理由は、、

  • 環境によって「秒の単位」のデフォルトが異なる。
  • また、同じ環境内でも「SLEEP関数」と「CALL SLEEP」の間で、「秒の単位」のデフォルトが異なっている場合がある。
    • 例えば、ある環境ではSLEEP関数のデフォルトが「1」で、CALL SLEEPのデフォルトが「0.001」みたいなケースがある。

てことで、第2引数の「秒の単位」は指定したほうが良いです。



0 件のコメント:

コメントを投稿