将时间变量转换为SAS中的数值

Converting time variable into a numeric value in SAS

我做了时间变量的减法(睡眠时间 = 唤醒时间 - 就寝时间),虽然我得到了正确的结果,但我需要将睡眠时间分为两类(如果睡眠时间 => 7 小时或睡眠 = 1 如果 < 小于 7h).

问题是当我对变量进行分类时,我没有得到正确的分类。这是我得到的:

bedtime   waketime   sleeptime sleep
22:00:00  07:00:00   09:00:00  1
22:30:00  06:30:00   08:00:00  1
00:55:00  08:10:00   07:15:00  0
02:30:00  08:30:00   06:00:00  1

这是我使用的代码:

data have;  set want;
sleeptime = waketime - bedtime;
if sleeptime => '07:00:00't then sleep=0;
if sleeptime < '07:00:00't then sleep=1; run; 

我一直在考虑将睡眠时间转换为一个值,以便更容易分类,例如:

bedtime   waketime   sleeptime sleeptime1
22:00:00  07:00:00   09:00:00  9
22:30:00  06:30:00   08:00:00  8
02:30:00  08:30:00   06:00:00  6 

有什么想法吗?感谢您的帮助!

时间变量是数字,所以你可以不用管它......但是你忘记了午夜!

要么将您的变量保留为 datetime(保留日期,这样您就可以像以前那样做这种事情),或者捏造它:

data have;
input bedtime :time8.  waketime :time8.;
datalines;
22:00:00  07:00:00   
22:30:00  06:30:00   
00:55:00  08:10:00   
02:30:00  08:30:00   
;;;;
run;

data want;
  set have;
  sleeptime = waketime-bedtime + (86400*(bedtime gt waketime));
  format bedtime waketime sleeptime time8.;
run;

这只有在您确定 waketime 应该在 bedtime 之后总是正确的情况下才有效。似乎有可能,但值得指出。 (而且,86400 是 24 小时中的秒数 - 如果需要,您也可以使用 '24:00:00't。)