一定の時間をインターバルで分割する方法

[OS] ALL
[リリース] ALL
[キーワード] INTERVAL, TIME

[質問]

次の例のように、開始時刻と終了時刻を与えて、その間の時間をN個のインターバルに分割する方法はありますか。

与える値
開始時刻:t1=9:00
終了時刻:t2=10:00
インターバル個数:N=6

作成される値
interval1: 9:00-9:10
interval2: 9:10-9:20
interval3: 9:20-9:30
interval4: 9:30-9:40
interval5: 9:40-9:50
interval6: 9:50-10:00

[回答]

時間間隔が与えた数値で必ず割り切れることが前提になりますが、次のようなプログラムで対応してみてはいかがでしょう。

以下の例では、まずINPUT 関数を用いて開始時刻・終了時刻をSAS時間値に変換し、それぞれ「t1」、「t2」に格納します。
SAS時間値とは、0:00 からの秒数で表した整数値です。

次に、インターバル間の増分が何秒になるかを求めます。具体的には「t1」と「t2」の差分を引数nで割った値になります。
最後に、各インターバルの開始時刻・終了時刻を求めます。それぞれ、以下のように表せます。

例:計算式の例


   start = t1 + inc * (interval - 1);                   /* 開始時刻 */
   end   = t1 + inc * interval;                         /* 終了時刻 */

例:マクロプログラムでの利用例


   %MACRO test(start,end,n);
      DATA test;
                                     /* 引数を SAS 時間値として格納 */
         t1=input("&start",TIME5.); 
         t2=input("&end",TIME5.);
                                  /* インターバルごとの増分を求める */
         inc=(t2-t1)/&n;
                                              /* インターバルを作成 */
         DO interval=1 TO &n;
            start = t1 + inc * (interval - 1);
            end   = t1 + inc * interval;
            OUTPUT;
         END;
         FORMAT start TIME5. end TIME5.;
         KEEP interval start end;
      RUN;
   %MEND test;

                                                     /* マクロの実行 */
   %test(9:00,10:00,6)