将时间变量转换为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
。)
我做了时间变量的减法(睡眠时间 = 唤醒时间 - 就寝时间),虽然我得到了正确的结果,但我需要将睡眠时间分为两类(如果睡眠时间 => 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
。)