Создание переменной как итоговой функции другой переменной
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 | * Создание новой переменной var на основе итоговой функции существующей переменной var1. * Например, когда требуется добавить новую переменную, которая равна * сумме, или стандартному отклонению, или медиане, или среднему значению другой переменной. * Очень удобная возможность. * Автор: Raynald Levesque, rlevesque@videotron.ca. DATA LIST FREE /age. BEGIN DATA 25 35 24 12 52 45 46 35 28 65 21 54 24 52 14 25 36 END DATA. LIST. SET CACHE=0. SET MPRINT=yes. *///////////////////////////. DEFINE !newvar (var=!TOKENS(1) /newname=!TOKENS(1) /func=!TOKENS(1)) * Есть возможность выбора имени для новой переменной. * Возможные итоговые функции: * med (медиана), а также sum, first, last, mean, и все другие функции, * определённые в команде AGGREGATE. COMPUTE dummy=1. !IF (!func='med') !THEN !LET !f=first RANK !var BY dummy /TIES=HIGH /RFRACTION INTO ranki. COMPUTE x=ranki-.5. IF x LT 0 x=x+1.0001. SORT CASES BY x !var. !LET !dropl='dummy ranki x' !ELSE !LET !f=!func !LET !dropl='dummy' !IFEND AGGREGATE OUTFILE='c:\\temp\\out1.sav' /PRESORTED /BREAK=dummy /!newname=!f(!var). MATCH FILES FILE=* /TABLE='c:\\temp\\out1.sav' /BY dummy /DROP !dropl. EXECUTE. !ENDDEFINE. *///////////////////////////. * Примеры использования макроса. !newvar var=age newname=med_age func=med. !newvar var=age newname=avg_age func=mean. !newvar var=age newname=nbcases func=n. !newvar var=age newname=sd_age func=sd. |
Related pages
...