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
* Пример переструктурирования данных - 4. Сбор информации об объекте из разных строк в одну с вычислением % вклада каждой категории в общую сумму.
* Синтаксис демонстрирует очень полезный приём преобразования данных.
* Автор: Raynald Levesque, rlevesque@videotron.ca.

* Если в вашей системе десятичная точка заменяется запятой, замените точки в примере данных на запятые, 
* чтобы данные прочитались как числа. - примеч. перев.
DATA LIST LIST /depart(A8) type(A2) value(F8.1).
BEGIN DATA.
anthro ft .8
anthro pt .2
anthro ot .3
engl ft .5
engl ft .7
engl pt .2
engl pt .2
engl ot .3
engl ot .3
engl ot .5
END DATA.
LIST.

IF type='ft' v1=value.
IF type='pt' v2=value.
IF type='ot' v3=value.


AGGREGATE
  /OUTFILE=*
  /BREAK=depart
  /ft '% ft' = SUM(v1) /pt '% pt' = SUM(v2) /ot '% ot' = SUM(v3).

COMPUTE tot_val=SUM(ft,pt,ot).
COMPUTE ft=ft*100/tot_val.
COMPUTE ot=ot*100/tot_val.
COMPUTE pt=pt*100/tot_val.
FORMAT ft ot pt (PCT8.1) tot_val(F8.1).


MATCH FILES FILE=* /KEEP=depart tot_val ft pt ot.
* Результат в редакторе данных показывает, например, что сумму по строкам для объекта anthro составляет
  1.3, при этом записи категории ft дают 61.5% от этой суммы, записи с категорией pt - 15.4% и остаток, записи ot - 23.1%.