* Тема: преобразовать переменную в ограниченный интервал значений. * Ключевые слова: преобразование, масштабирование, шкала, переменная, интервал. * Опубликован: 16.06.2008. * Автор: rlevesque@videotron.ca. * Перевод: А. Балабанов. * Размещение: http://www.spsstools.ru/Syntax/Transform/ConstrainVariableToAgivenInterval.txt (.sps). * (Вопрос) Как преобразовать переменную "a" так, чтобы она принимала значения в определённом интервале [0,1] ?. * (Ответ) Предложено следующее линейное преобразование. Автор: rlevesque@videotron.ca, размещено в SPSSX-L on 25.09.2001. DATA LIST FREE /a. BEGIN DATA -5 12 85 26 -2 18 END DATA. LIST. COMPUTE dummy=1. AGGREGATE /OUTFILE='C:\\temp\\AGGR.SAV' /BREAK=dummy /minval = MIN(a) /maxval = MAX(a). MATCH FILES /FILE=* /TABLE='C:\\Temp\\AGGR.SAV' /BY dummy. COMPUTE newa=(a-minval)/(maxval - minval). EXECUTE. ************************************. * * Обобщение 1. * Чтобы преобразовать приведённое выше решение в макрос, можно сделать следующее. * ************************************. SET MPRINT=no. */////////////////////. DEFINE !transf (var=!TOKENS(1) /newvar=!TOKENS(1)) COMPUTE dummy=1. AGGREGATE /OUTFILE='C:\\temp\\AGGR.SAV' /BREAK=dummy /minval = MIN(!var) /maxval = MAX(!var). MATCH FILES /FILE=* /TABLE='C:\\Temp\\AGGR.SAV' /BY dummy. COMPUTE !newvar=(!var-minval)/(maxval - minval). !ENDDEFINE. */////////////////////. * Пример использования. SET MPRINT=yes. GET FILE='c:\\Program Files\\spss\\employee data.sav'. !transf var=salary newvar=nsal. EXECUTE. ************************************. * * Обобщение 2. * Чтобы обеспечить любую ширину интервала [b,c] вместо [0,1] делаем следующее. * ************************************. SET MPRINT=no. */////////////////////. DEFINE !transf2 (var=!TOKENS(1) /newvar=!TOKENS(1) /intbeg=!TOKENS(1) /intend=!TOKENS(1)) /* Задача: преобразовать переменную var в newvar так, что newvar принимает значение из интервала [intbeg,intend] */ COMPUTE dummy=1. AGGREGATE /OUTFILE='C:\\temp\\AGGR.SAV' /BREAK=dummy /minval = MIN(!var) /maxval = MAX(!var). MATCH FILES /FILE=* /TABLE='C:\\Temp\\AGGR.SAV' /BY dummy. COMPUTE !newvar=!intbeg + (!intend - !intbeg)*(!var-minval)/(maxval - minval). !ENDDEFINE. */////////////////////. * Пример использования. SET MPRINT=yes. GET FILE='c:\\Program Files\\spss\\employee data.sav'. !transf2 var=salary newvar=nsal intbeg=2 intend=7. EXECUTE. * Проверка. DESCRIPTIVES VARIABLES=nsal /STATISTICS=MEAN RANGE MIN MAX.