一定の時間をインターバルで分割する方法
[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) |