* Замена значений, ушедших в меньшую или большую сторону от среднего более, чем на n стандартных отклонений * граничными значениями. * Предполагается, что вы уверены в правомерности такой замены! В следующем предупреждении я * воспроизвёл рекомендации, данные Артуром Кенделом (Arthur J. Kendal). *********************** ВНИМАНИЕ! ***************************************. * Изменение значений, которые кажутся выбросами, часто приводит к неверным результатам. * Эта процедура должна применяться очень избирательно. Перед применением этого синтаксиса убедитесь, что "выбросы" не являются ошибками ввода данных. * Проанализируйте ваши данные до и после процедуры удаления выбросов. * Рекомендуется проконсультироваться у профессионального статистика перед тем, как заменять значения "выбросов". *************************************************************************. * Этот макрос - обобщение синтаксиса, размещённого Mirko Wendland в SPSSX-L 02.09.2002. * Макрос размещён в SPSSX-L 02.09.2002, автор: Raynald Levesque. * См. сайт по SPSS: http://www.spsstools.net. */////////////////. DEFINE !mac1 (savfile=!TOKENS(1) /tmpdir=!TOKENS(1) /grp=!TOKENS(1) /nbsd=!TOKENS(1) /vars=!CMDEND) /* ВХОДНЫЕ ПАРАМЕТРЫ */ /*savfile путь и имя файла, с которым будем работать */ /*tmpdir директория для сохранения временных файлов */ /*grp имя категориальной переменной, задающей группы */ /*nbsd число стандартных отклонений, которое будем использовать*/ /*vars список переменных, значения которых будут анализироваться*/ /* на предмет замены в случае, если их значения отклонились */ /* от среднего более, чем на +/- !nbsd * SD. Имена переменных */ /* должны иметь не более 7 символов */ /* РЕЗУЛЬТАТЫ */ /* создаётся набор новых переменных, чьи значения укладываются в заданный */ /* интервал. Имена переменных - формируются из старых имён, к которым */ /* добавляется двойка */ /* Например, новые значения переменной salary будут в переменной salary2. */ GET FILE=!savfile. SORT CASES BY !grp. SAVE OUTFILE=!tmpdir + 'sort.sav'. * считаем средние и стандартные отклонения для каждой подгруппы. AGGREGATE OUTFILE = * /PRESORTED /BREAK = !grp !DO !v !IN (!vars) /!CONCAT(!v,m) = mean(!v) /!CONCAT(!v,s) = sd(!v) !DOEND. AUTORECODE VARIABLES=!grp /INTO grpcode. COMPUTE nobreak=1. RANK VARIABLES=grpcode BY nobreak /N INTO n . DO IF $CASENUM=1. WRITE OUTFILE=!tmpdir + 'syntax.sps' /"DEFINE !n()"n"!ENDDEFINE.". END IF. EXECUTE. INCLUDE !tmpdir + 'syntax.sps'. !mac2 nbgrp=!EVAL(!n) tmpdir=!tmpdir grp=!grp nbsd=!nbsd vars=!vars. !ENDDEFINE. *----------------. */////////////////. DEFINE !mac2(nbgrp=!TOKENS(1) /tmpdir=!TOKENS(1) /grp=!TOKENS(1) /nbsd=!TOKENS(1) /vars=!CMDEND) /* считаем значения каждой границы*/ !DO !v !IN (!vars) !DO !grpnb = 1 !TO !nbgrp + DO IF !grp=!grpnb. + COMPUTE !CONCAT(!v,l) = !CONCAT(!v,m) - (!nbsd * !CONCAT(!v,s)). + COMPUTE !CONCAT(!v,h) = !CONCAT(!v,m) + (!nbsd * !CONCAT(!v,s)). + END IF. !DOEND !DOEND SAVE OUTFILE=!tmpdir + 'lohi.sav'. * сливаем исходные данные с данными границ (средние и станд. откл). MATCH FILES FILE=!tmpdir + 'sort.sav' /TABLE=!tmpdir + 'lohi.sav' /BY=!grp. * заменяем выбросы на значения верхней или нижней границ. DO REPEAT num=1 TO !nbgrp. DO IF (grpcode = num). !DO !v !IN (!vars) + COMPUTE #tmp = !v. + IF (!v < !CONCAT(!v,l)) #tmp = !CONCAT(!v,l). + IF (!v > !CONCAT(!v,h)) #tmp = !CONCAT(!v,h). + COMPUTE !CONCAT(!v,2) = #tmp. !DOEND END IF. END REPEAT PRINT. !ENDDEFINE. *----------------. **** Вызов макроса. SET MPRINT=yes. !mac1 savfile='c:\\program files\\spss\\employee data.sav' tmpdir='c:\\temp\\' grp=jobcat nbsd=2 vars=salary prevexp . EXECUTE.