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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
* ВОПРОС: В данных имеются номер, название школы и некоторый балл для каждой школы. Как вывести в заголовок графика или таблицы названия школ?

* ОТВЕТИЛ: rlevesque@videotron.ca.

DATA LIST FREE /school (F8.0) s_name(A12) score (F8.0).
BEGIN DATA
1 'первая' 19 1 'первая' 14 1 'первая' 29 1 'первая' 20
2 'вторая' 13 2 'вторая' 24 2 'вторая' 24 2 'вторая' 22
3 'третья' 20 3 'третья' 34 3 'третья' 27 3 'третья' 25
7 'седьмая' 40 7 'седьмая' 44 7 'седьмая' 22 7 'седьмая' 26
END DATA.

SORT CASES BY school.
SAVE OUTFILE='c:\\temp\\temp.sav'.

* Подсчитаем число школ.
AGGREGATE
  /OUTFILE=*
  /BREAK=school
  /s_name = FIRST(s_name).
RANK
  VARIABLES=school (A) /RANK /N INTO n_school.

* Запишем в макрос число школ.
DO IF $casenum=1.
WRITE OUTFILE 'c:\\temp\\temp.sps' /"DEFINE !n_sch()"/n_school/"!ENDDEFINE.".
END IF.
EXECUTE.
INCLUDE FILE='c:\\temp\\temp.sps'.

* Определим макрос, содержащий имена школ.
STRING str_nam(A8).
COMPUTE str_nam=CONCAT('!nam',LTRIM(STRING(rschool,F8.0)," "),"()").  
DO REPEAT r=1 TO !n_sch.
+ DO IF rschool=r.
+ WRITE OUTFILE 'c:\\temp\\temp.sps' /"DEFINE "str_nam /s_name/"!ENDDEFINE.".
+ END IF.
END REPEAT.
EXECUTE.
INCLUDE 'c:\\temp\\temp.sps'.

MATCH FILES /TABLE=*
 /FILE='C:\\temp\\temp.sav'
 /BY school.

*Определяем макрос, непосредственно строящий графики.
*////////////////////////////////////.
DEFINE !doit().
!DO !sch=1 !TO !EVAL(!n_sch).
COMPUTE filter_=(rschool=!sch).
FILTER BY filter_.
* Читателю: замените ниже названия, графики и таблицы на те, которые вам необходимы.

!LET !title1=!QUOTE(!EVAL(!CONCAT('Гистограмма: ','!nam',!sch)))
!LET !title2=!QUOTE(!EVAL(!CONCAT('Сводка: ','!nam',!sch)))

GRAPH
/TITLE=!title1
/HISTOGRAM=score .

SUMMARIZE
/TABLES=score
/FORMAT=NOLIST TOTAL
/TITLE=!title2
/MISSING=VARIABLE
/CELLS=COUNT MEDIAN VAR .
FILTER OFF.
!DOEND
!ENDDEFINE.
*////////////////////////////////////.

*Вызываем макрос.
!doit.