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
*(Вопрос) Нужен синтаксис для расчёта прироста площади под кривой не
	относительно нуля, а относительно какого-то базисного уровня.
* Численные примеры можно найти на
	http://www.fao.org/docrep/w8079e/w8079e0a.htm и на
	http://www.fao.org/docrep/w8079e/w8079e00.gif.

*(Ответ) Помещён в SPSSX-L, Raynald Levesque, 19.06.2002.

* Следующий пример данных взят с указанного выше веб-сайта.
DATA LIST LIST /id meas0 meas15 meas30 meas45 meas60 meas90 meas120 iauc1
	(9F8.1).
BEGIN DATA
0	4,3 6,3 7,9 5,3 4,1 4,6 4,9 114
1	4 6 6,7 5,5 5,3 5 4,2 155
2	4,1 5,8 8 6,5 5,9 4,8 3,9 179
3	4 5 5,8 5,4 4,8 4,2 4,4 93
4	4,1 6,3 9 8,7 6,7 5,7 3,9 279
5	5 7,1 8,8 8 5,6 5,4 4,2 155
END DATA.
LIST.

* Установка моментов времени для горизонтальной оси.
DO REPEAT h = h0 h15 h30 h45 h60 h90 h120
	/ t = 0 15 30 45 60 90 120.
COMPUTE h = t.
END REPEAT.
EXECUTE.

* Интегрирование кривой функции gluс = f(time) по формуле трапеции; gluc -     
уровень глюкозы, time - время.
VECTOR time = h0 to h120.
VECTOR gluc = meas0 to meas120 .
COMPUTE iauc2 = 0.
LOOP #k = 2 to 7.
-	IF #k=2 inival = gluc(1).
-	DO IF (NOT(MISSING(gluc(#k)))).
-		COMPUTE minval=MIN(gluc(#k-1),gluc(#k)) - inival.
-		COMPUTE maxval=MAX(gluc(#k-1),gluc(#k)) - inival.
-		DO IF minval>0.
-			COMPUTE iauc2 = iauc2 + (time(#k) - time(#k -1)) *
				((gluc(#k -1) + gluc(#k))/2-inival).
-		ELSE IF maxval>0.
-			COMPUTE iauc2 = iauc2 + (time(#k) - time(#k -1))*
				(maxval / (maxval - minval)*maxval/2) .
-		END IF.
-	END IF.
END LOOP.

* Убираем лишнее.
MATCH FILES FILE=* /DROP=h0 h15 h30 h45 h60 h90 h120 minval maxval inival.
EXECUTE.