* XpandVectorNames.SPS. * Макрос размещён в списке рассылки SPSSX-L 15.03.2001. Автор: Hauke Petersen hauke.petersen@INTERACTIVEMEDIA.DE. * Макрос позволяет ссылаться на вектор переменных (переменные, именованные как, например, a1 - a40) даже если они БЕСПОРЯДОЧНО расположены в файле данных. См. комментарии в конце файла.. DATA LIST LIST /a. BEGIN DATA 1 END DATA. LIST. * Пример векторных переменных, непоследовательно расположенных в файле данных. NUMERIC a1 b02 a4 b01 a3 b03 a2. SET MPRINT=yes. define !xpand(!pos !tokens(1) / !pos !tokens(1) / !pos !tokens(1)) !do !i=!2 !to !3 !concat(!1,!i," ") !doend !enddefine. * Пример использования макроса. * Выведем содержимое переменных в нужном порядке. LIST !xpand a 1 4 !xpand b0 1 3. * Если хотим, можем пересортировать переменные в файле данных таки образом, чтобы векторные переменные шли одна за другой в соответствии со своим номером. COMPUTE dummy=1. MATCH FILES FILE=* /BY=dummy /KEEP=!xpand a 1 4 ALL. ********************. * Заметки Рейналя: ********************. * 1. Вызов макроса !xpand должен помещаться в той же строке, что и предыдущие команды, не в новой строке. Например, следующая команда * не будет работать, т.к. второй вызов макроса располагается в новой строке. LIST !xpand a 1 4 !xpand b0 1 3. * 2. Макрос также полезен если конструкция вроде "var1 TO var10" не работает. Например, когда нам нужен цикл вроде !DO !var !IN (!list) где !list - один из макропараметров. Это может быть сделано примерно так: define !my(list !cmdend) !DO !var !IN (!list) DESCRIPTIVES !var. !doend !enddefine. !my list=!xpand a 1 4.