1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
* Считаем продолжительность сна. (даты в данных не указаны).
* Автор: Raynald Levesque.

* Допустим, id - номер наблюдения, sleetime - время отхода ко сну в 12-часовом формате,
sampm - указание на период до полудня или после полудня (AM/PM), waketime - время пробуждения,
wampm - указание на период пробуждения.
NEW FILE.
DATA LIST LIST /id(F8) Sleetime(TIME5) sampm(A2) waketime(TIME5) wampm(A2).
BEGIN DATA.
1 12:00 PM 11:00 AM 
2 2:00 AM 10:00 AM
3 4:00 AM 1:00 PM
4 11:30 PM 12:30 PM
5 12:30 AM 12:45 PM
END DATA.
LIST.

* В нашей записи 12:30 AM означает отход ко сну в половине первого ночи.
COMPUTE  timebeg=12+sleetime/3600.
IF sampm='AM' AND (XDATE.HOUR(sleetime)<>12) timebeg=timebeg+12.
COMPUTE  timeend=24+waketime/3600.
IF wampm='PM' AND (XDATE.HOUR(waketime)<>12) timeend=timeend+12.
COMPUTE dur1=timeend-timebeg.
* Здесь переменная dur1 - числовая, т.е. 10.25 означает 10 часов 15 минут)
* Если нужен ответ в формате времени (HH:MM), поступаем так.
COMPUTE dur2=dur1*3600.
FORMATS dur2(TIME5).
EXECUTE.


NEW FILE.
DATA LIST LIST /id(F8) Sleetime(DTIME8) waketime(DTIME8).
BEGIN DATA.
1 1:00:00 1:11:00 
2 1:2:00 1:10:00
3 1:4:00 1:1:00
4 0:11:30 1:12:30
5 1:00:30 1:12:45 
END DATA.
LIST.

* Вариант 2.
* Здесь время заведено в формате DTIME. В данном формате
* 0 21:00 означает 9 PM в день перед началом исследования.
* 1 00:30 означает половину первого ночи.
* 1 01:00 означает 1 AM в день исследования.
* 1 12:30 означает 12:30 PM в день исследования.

COMPUTE dur3=waketime-Sleetime.
FORMAT dur3 (TIME5).
*Здесь dur3 - продолжительность в часах и минутах (10:30 это 10 часов и 30 минут).
EXECUTE.