我正在尝试计算一个人睡眠的时间长度。我的数据集包含以下变量:
SleepHour
、SleepMinute
、SleepAM_PM
、WakeHour
、WakeMinute
和WakeAM_PM
。小时变量的范围是 1-12,分钟变量的范围是 0-59,AM/PM 变量是二进制的(1 = AM;2 = PM)。
我尝试了以下代码,结果很接近,但它没有考虑到分钟是按 60 分制来衡量的事实,因此晚上 11:00 睡觉并早上 6:30 起床的人被列为 7.70睡眠时间,虽然应该是 7.30。
* Calculate time spent asleep with decimal places.
COMPUTE SleepMilitaryTime = 0.
COMPUTE WakeMilitaryTime = 0.
COMPUTE SleepDuration = 0.
* Convert sleep time to military time.
IF (SleepAM_PM = "PM" & SleepHour < 12) SleepMilitaryTime = (SleepHour + 12) * 100 + SleepMinute.
IF (SleepAM_PM = "AM" & SleepHour = 12) SleepMilitaryTime = SleepMinute.
IF (SleepAM_PM = "AM" & SleepHour < 12) SleepMilitaryTime = SleepHour * 100 + SleepMinute.
* Convert wake time to military time.
IF (WakeAM_PM = "PM" & WakeHour < 12) WakeMilitaryTime = (WakeHour + 12) * 100 + WakeMinute.
IF (WakeAM_PM = "AM" & WakeHour = 12) WakeMilitaryTime = WakeMinute.
IF (WakeAM_PM = "AM" & WakeHour < 12) WakeMilitaryTime = WakeHour * 100 + WakeMinute.
* Calculate sleep duration with decimal places.
IF (WakeMilitaryTime >= SleepMilitaryTime) SleepDuration = (WakeMilitaryTime - SleepMilitaryTime) / 100.
IF (WakeMilitaryTime < SleepMilitaryTime) SleepDuration = ((2400 + WakeMilitaryTime) - SleepMilitaryTime) / 100.
EXECUTE.
我还尝试使用 SPSS 日期和时间向导,但我认为只有当时间为 24 小时制时才有效,而这些则不然。
如果您知道如何解决这个问题,我将非常感激!!
没关系!我通过创建一个将小时数转换为 24 小时制的临时变量解决了这个问题(废话!)。将代码粘贴到此处以供将来的读者使用:
COMPUTE SleepHour = -999.
IF (Sleep_AM_PM = 2) SleepHour24 = (SleepHour + 12).
IF (Sleep_AM_PM = 1 & SleepHour = 12) SleepHour24 = 0.
IF (Sleep_AM_PM = 1 & SleepHour< 12) SleepHour24 = SleepHour.
missing values SleepHour24 (-999).
execute.
*Create variable in time format.
COMPUTE SleepTime=TIME.HMS(SleepHour24, SleepMinute, 0).
VARIABLE LEVEL SleepTime(SCALE).
FORMATS SleepTime (TIME5).
VARIABLE WIDTH SleepTime(5).
execute.