一定の時間をインターバルで分割する方法
[OS] ALL
[リリース] ALL
[キーワード] INTERVAL, TIME
[質問]次の例のように、開始時刻と終了時刻を与えて、その間の時間をN個のインターバルに分割する方法はありますか。
[回答]時間間隔が与えた数値で必ず割り切れることが前提になりますが、次のようなプログラムで対応してみてはいかがでしょう。
以下の例では、まずINPUT 関数を用いて開始時刻・終了時刻をSAS時間値に変換し、それぞれ「t1」、「t2」に格納します。
次に、インターバル間の増分が何秒になるかを求めます。具体的には「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)
|
|