* Вопрос. Может ли кто порекомендовать ПО, которое бы строило графики распределения, например, гистограммы, и могло бы подсвечивать определённые точки данных. Я провожу исследование удовлетворённости трудом на предприятии и для каждого отдела вычисляю, скажем, средний уровень удовлетворённости содержанием работы. В данный момент мы выдаём отделам таблицу, где указан средний уровень удовлетворённости по предприятию в целом и уровень удовлетворённости для определённого отдела. Было бы здорово графически изобразить эти данные, указав, какое место занимает отдел в общем распределении уровней удовлетворённости по предприятию. * Ответ. Автор: rlevesque@videotron.ca, размещено в новостной группе SPSS 10.08.2001. * NB! Синтаксис предполагает работу с шаблоном графика. Данный шаблон корректно работает лишь в версиях SPSS для Windows до 11 включительно. - А.Б. * NB! Здесь не строится гистограмма, как было указано в вопросе, но зато вычисляется процентиль, к которому относится наблюдение. - А.Б. SET MPRINT=yes. *///////////////////// Определяем макрос /////////////////////////. DEFINE !print(myvar=!TOKENS(1)) GRAPH /HISTOGRAM=!myvar . !DO !counter = 1 !TO !EVAL(!n). COMPUTE mypct=0. IF ($casenum=!counter) mypct=pct. !LET !name=!EVAL(!CONCAT('!id',!counter)) !LET !title=!QUOTE(!CONCAT("Выделенный кружок обозначает ",!name)) GRAPH /TEMPLATE="c:\\temp\\IdentifyYourOwnData.sct" /SCATTERPLOT(BIVAR)=!myvar WITH id BY mypct /MISSING=LISTWISE /TITLE=!title /FOOTNOTE='(mypct - процентиль, к которому относится наблюдение)' . !DOEND. !ENDDEFINE. *----------------------------Конец макроса ----------------. *////////////////////////////////////////////. DEFINE !main (myvar=!TOKENS(1) /idname=!TOKENS(1)) RANK VARIABLES=!myvar (A) /PERCENT INTO pct /N into n /TIES=MEAN . SORT CASES BY pct. COMPUTE id=$CASENUM. * Переменная n, созданная выше командой RANK, содержит число наблюдений в файле. * Запишем его в макрос чтобы потом иметь возможность использовать. DO IF $CASENUM=1. WRITE OUTFILE 'c:\\temp\\temp.sps' /"DEFINE !n()"n"!ENDDEFINE.". END IF. EXECUTE. * Загружаем созданный выше макрос в память. INCLUDE FILE='c:\\temp\\temp.sps'. * Определим макрос, который содержит имя (номер, id) каждого наблюдения. STRING mac_name(A8). COMPUTE mac_name=CONCAT('!id',LTRIM(STRING(id,F8.0)," "),"()"). DO REPEAT r=1 TO !EVAL(!n). + DO IF id=r. + WRITE OUTFILE 'c:\\temp\\temp id names.sps' /"DEFINE "mac_name !idname"!ENDDEFINE.". + END IF. END REPEAT. EXECUTE. INCLUDE 'c:\\temp\\temp id names.sps'. !print myvar=!myvar. !ENDDEFINE. *////////////////////////////////////////////. ******* Пример 1. GET FILE='C:\\Program Files\\SPSS\\WORLD95.sav'. * Поскольку каждое наблюдение уже содержит обобщённые результаты по стране, никакой дополнительной обработки не требуется. * Следующая команда просто чтобы урезать файл данных и размер выдачи - оставим в файле первые 10 стран. N OF CASES 10. * Вызовем макрос, показывающий плотность населения для каждой страны на отдельном графике. !main myvar=density idname=country. ******* Пример 2. GET FILE='C:\\Program Files\\SPSS\\Employee data.sav'. * Посчитаем сначала средний заработок по категориям jobcat. AGGREGATE /OUTFILE=* /BREAK=jobtime /salary = MEAN(salary). * Вызываем макрос. !main myvar=salary idname=jobtime.