В ответ на вопрос мне прислали макрос, но я не знаю, как его использовать…
Данный пример включает 3 раздела:
- Исходный вопрос
- Размещённый ответ
- Комментарии к использованию макроса
Исходный вопрос
Я строю большое количество столбиковых диаграмм (bar charts). Из каждой диаграммы я должен исключить категории, в которые попало менее 10 студентов. Я сейчас запускаю частотный анализ, а затем вручную удаляю те категории, которые должны быть пропущены. Но мне кажется, есть лучший способ решить эту проблему. Буду рад вашим предложениям.
Размещённый ответ
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. COMPUTE dummy=1. SET MPRINT=no. *////////////////////. DEFINE !chart (minnb=!TOKENS(1) /cat=!TOKENS(1)) FILTER OFF. * Сортировка необходима для команды 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. COMPUTE flag=(nb>=!minnb). FILTER BY flag. GRAPH /BAR(SIMPLE)=COUNT BY !cat /MISSING=REPORT. * Удаляем переменную nb. MATCH FILES FILE=* /DROP=nb. !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. * Сортировка необходима для команды 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. MATCH FILES FILE=* /DROP=dummy. !ENDDEFINE. */////////////////// SET MPRINT=yes. !chart2 minnb=5 cats= age prog year. EXECUTE.
Комментарии к использованию макроса
Для краткости я прокомментирую ответ с первым макросом (он называется !chart
). (Последовательность действий для второго макроса такая же).
1. Запустите SPSS
2. Откройте (загрузите) свои данные через меню: File>Open>Data
3. Откройте редактор синтаксиса через меню: File>New>Syntax
4. Выделите синтаксис для макроса !chart
и поместите его в редактор синтаксиса.
Макрос — это часть присланного синтаксиса, начинающаяся с
*////////////////////. DEFINE !chart (minnb=!TOKENS(1) /cat=!TOKENS(1))
и заканчивающаяся инструкциями
!ENDDEFINE. *////////////////////. SET MPRINT=yes. !chart minnb=5 cat=age.
5. Комментарии: сам макрос заканчивается командой !ENDDEFINE
. Инструкция SET MPRINT=yes
нужна просто для того, чтобы вы видели код макроса в окне результатов.
Строчка !chart minnb=5 cat=age
— это уже вызов макроса. Она означает: выполнить макрос chart
(построить диаграмму), используя переменную age (возраст), исключая из графика те категории возраста, куда попадают менее 5 человек.
6. Предположим, что одна из категориальных переменных в вашем файле — language (язык) и вы хотите исключить вывод языков, не набравших минимальной частоты 10. Тогда замените строку
!chart minnb=5 cat=age.
на следующие 3 строки:
COMPUTE dummy=1. !chart minnb=10 cat=language. EXECUTE.
7. Замечание: Команда COMPUTE
, приведённая выше, находится двумя строками выше команды DEFINE
в присланном ответе.
8. Теперь настаёт чарующий момент, когда вы готовы запустить макрос. Чтобы это сделать, выберите меню: Run>All
9. Проверьте окно результатов. Там должен быть график.
10. Если вам нужно сделать ещё графики с переменными region (регион) и climate (климат), добавьте ещё две строки:
!chart minnb=10 cat=region. !chart minnb=10 cat=climate.
11. Комментарии: макрос !chart позволяет вам варьировать имена переменных для которых строится график и минимальный порог частоты отображаемой категории.
12. Если вам надо построить графики для нескольких переменных с одной и той же минимальной частотой, используйте макрос с именем !chart2
. Пример вызова этого макроса:
!chart2 minnb=10 cat=age climate region.
Макрос !chart2
полностью прокомментирован здесь.
...