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
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
* (Вопрос) Я печатаю большое количество столбцовых диаграмм (ответы студентов на разные вопросы). Для каждого графика мне надо исключить категории с частотами, меньшими 5. Сейчас я вручную убираю категории, которые должны быть пропущены, но я подозреваю, что есть лучшее средство. Буду глубоко признателен за идеи.

*(Ответ) Размещён в SPSSX-L rlevesque@videotron.ca 21.09.2001. Прилагаются 2 разных макроса. Выберите тот, который полнее отвечает вашим задачам.


DATA LIST LIST /age prog year.
BEGIN DATA 
25 1 2
25 1 2 
25 1 2 
25 1 2 
25 1 4
25 1 4
25 1 4
25 1 4
25 1 4
25 1 4
25 1 7
25 1 7
25 1 7
25 1 7
25 1 2
26 1 2
27 2 1
27 2 1
27 2 1
27 2 1
27 2 1
27 2 1
END DATA.

SET MPRINT=no.
*////////////////////.
DEFINE !chart (minnb=!TOKENS(1) /cat=!TOKENS(1))

FILTER OFF.
* Сортировка необходима для последующего выполнения команды AGGREGATE и MATCH FILES.
COMPUTE dummy=1.
SORT CASES BY !cat.
!LET !fname=!QUOTE(!CONCAT('C:\\temp\\',!cat,'.SAV'))
AGGREGATE
  /OUTFILE=!fname
  /PRESORTED
  /BREAK=!cat
  /nb = N(dummy).

MATCH FILES /FILE=*
 /TABLE=!fname
 /BY !cat.
FREQUENCY VARIABLES=!cat.

COMPUTE flag=(nb>=!minnb).
FILTER BY flag.
GRAPH
  /BAR(SIMPLE)=COUNT BY !cat
  /MISSING=REPORT.
* Delete the variable nb.
FILTER OFF.
MATCH FILES FILE=* /DROP=nb flag dummy.
EXECUTE.
!ENDDEFINE.
*////////////////////.

SET MPRINT=yes.
!chart minnb=5 cat=age.
!chart minnb=6 cat=prog.
!chart minnb=5 cat=year.

* Выше приведённый метод хорош, если вам нужно что-то ещё делать с данными и результатами между печатью графиков.

* Если же нужно напечатать серию графиков с одной и той же минимальной частотой, следующий макрос будет более подходящим.

SET MPRINT=no.
*////////////////////.
DEFINE !chart2 (minnb=!TOKENS(1) /cats=!CMDEND)
/* minnb = минимальная частота, подлежащая отображению на графике*/.
/* cats    = имена категориальных переменных, для которых нужны графики*/.

COMPUTE dummy=1.
!DO !cat !IN (!cats)
FILTER OFF.
* Сортировка необходима для последующего выполнения команды AGGREGATE и MATCH FILES.
SORT CASES BY !cat.
!LET !fname=!QUOTE(!CONCAT('C:\\temp\\',!cat,'.SAV'))
AGGREGATE
  /OUTFILE=!fname
  /PRESORTED
  /BREAK=!cat
  /nb = N(dummy).

MATCH FILES /FILE=*
 /TABLE=!fname
 /BY !cat.
FREQUENCY VARIABLES=!cat.
LIST.
COMPUTE flag=(nb>=!minnb).
FILTER BY flag.
GRAPH
  /BAR(SIMPLE)=COUNT BY !cat
  /MISSING=REPORT.
* Убираем переменную nb с частотами категорий.
MATCH FILES FILE=* /DROP=nb.
!DOEND
* Убираем вспомогательную переменную dummy.
FILTER OFF.
MATCH FILES FILE=* /DROP=dummy flag.
!ENDDEFINE.
*///////////////////

SET MPRINT=yes.
!chart2 minnb=5 cats= age prog year.
EXECUTE.