僕の頁 <SASと臨床試験と雑談と>

徒然なるままにSAS暮らし

0311

睡眠時間の計算  

とある仕事で睡眠時間の計算が必要になり、後輩に「このデータから
ちゃんと睡眠時間計算できますよね」と脅迫されたので少し考えてみました。
ただBoolean型の表現が便利というだけで大した話ではありません。。

入力データは、言うまでもなく就寝時刻と起床時刻ですが、以下の
条件を考慮する必要があります。
・時刻は文字列で格納される("23:30"など)。
・最終的に単位は「時間」で格納する。
・単純に引き算すると負の数になるので、0時をまたぐ/またがないで
 きちんと場合分けが必要である。

プログラムの処理は以下になります。
・inputステートメントで文字をSAS時間値に変換(単位は秒)
・引き算の正負をBoolean(偽:0/真:1)で返して睡眠時間を計算
・睡眠時間の単位を時間に変換

data sleeptime ;
*--- 就寝時刻と起床時刻 ;
input bedtime time5. wakeuptime time5. ;
*--- 睡眠時間(秒と時間) ;
_interval_s = wakeuptime - bedtime + (wakeuptime - bedtime < 0)*24*3600 ;
_interval_h = _interval_s/3600 ;

*--- 【参考】睡眠時間の時間部分と分部分 ;
h_part = hour(_interval_s) ;
m_part = minute(_interval_s) ;

label bedtime="就寝時刻" wakeuptime="起床時刻"
_interval_s = "睡眠時間(秒)" _interval_h = "睡眠時間(時間)"
h_part = "時間" m_part = "分" ;
format bedtime wakeuptime hhmm5. ;
cards;
23:10 6:50
1:00 7:10
;
run ;

proc print data=sleeptime label ;
run ;


結果を見てみましょう。就寝時刻が0時を超えた場合と超えていない場合の
睡眠時間が正しく計算されています。
睡眠時間

スポンサーサイト

Posted on 2014/03/11 Tue. 00:14 [edit]

CM: 0
TB: 0

プロフィール

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

訪れた人

▲Page top