Трансформация переменной в заданный интервал
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 | * Тема: преобразовать переменную в ограниченный интервал значений. * Ключевые слова: преобразование, масштабирование, шкала, переменная, интервал. * Опубликован: 16.06.2008. * Автор: rlevesque@videotron.ca. * Перевод: А. Балабанов. * (Вопрос) Как преобразовать переменную "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. |
Related pages
...