*(Вопрос) Кто-нибудь знает, как написать макрос для этого типа таблицы TABLES /FORMAT BLANK MISSING('.') /TABLES ( q24 + q25 + q26 + q27) BY (LABELS) > (STATISTICS) /STATISTICS COUNT ((F5.0) 'N' ) CPCT ((PCT7.2) '%' ) . * так, чтобы написать "q24 to q27" вместо того, чтобы выписывать их все подряд? * Замечание: Мы покажем исходный ответ и 2 обобщения. * Ray. ****************************. * (Ответ) Исходный ответ. Автор: Burnkrant, Steve, размещён в SPSSX-L, 04.10.2001 * (он ответил на собственный вопрос). ****************************. DEFINE !FREQS (). !LET !x = 'q24' !DO !i=25 !to 27 !LET !x = !CONCAT(!x,'+','q',!i) !DOEND TABLES /FORMAT BLANK MISSING('.') /TABLES (!x) BY (LABELS) > (STATISTICS) /STATISTICS COUNT ((F5.0) 'N' ) CPCT ((PCT7.2) '%' ) . !ENDDEFINE. !FREQS. ***************************. * Обобщение 1. Автор: Ray. * Добавим параметр с начальными символами имен векторных переменных и возможностью заказывать любое последовательное число переменных. ***************************. SET MPRINT=no. *///////////////////////////. DEFINE !FREQS (stem=!TOKENS(1) /beg=!TOKENS(1) /end=!TOKENS(1)) !DO !i=!beg !to !end !IF (!i=!beg) !THEN !LET !x = !CONCAT(!stem,!i) !ELSE !LET !x = !CONCAT(!x,' + ',!stem,!i) !IFEND !DOEND TABLES /FORMAT BLANK MISSING('.') /TABLES (!x) BY (LABELS) > (STATISTICS) /STATISTICS COUNT ((F5.0) 'N' ) CPCT ((PCT7.2) '%' ) . !ENDDEFINE. *///////////////////////////. SET MPRINT=yes. !FREQS stem=q beg=24 end=27. * Вот результирующий синтаксис, который поступает на исполнение в результате действия макроса. TABLES /FORMAT BLANK MISSING('.') /TABLES ( q24 + q25 + q26 + q27 ) BY (LABELS) > (STATISTICS) /STATISTICS COUNT ((F5.0) 'N' ) CPCT ((PCT7.2) '%' ). ***************************. * Обобщение 2. Автор: Ray. * Как и раньше, но добавлена возможность заказа разных векторов одной и той же размерности. ***************************. SET MPRINT=no. *///////////////////////////. DEFINE !FREQS (beg=!TOKENS(1) /end=!TOKENS(1) /stems=!CMDEND) !DO !i=!beg !to !end !LET !first='1' !IF (!i=!beg) !THEN !DO !stem !IN (!stems) !IF (!first='1') !THEN !LET !x = !CONCAT(!stem,!i) !LET !first='0' !ELSE !LET !x = !CONCAT(!x,' + ',!stem,!i) !IFEND !DOEND !ELSE !DO !stem !IN (!stems) !LET !x = !CONCAT(!x,' + ',!stem,!i) !DOEND !IFEND !DOEND TABLES /FORMAT BLANK MISSING('.') /TABLES (!x) BY (LABELS) > (STATISTICS) /STATISTICS COUNT ((F5.0) 'N' ) CPCT ((PCT7.2) '%' ) . !ENDDEFINE. *///////////////////////////. SET MPRINT=yes. !FREQS beg=1 end=20 stems=ci q v. * Вот результирующий синтаксис. TABLES /FORMAT BLANK MISSING('.') /TABLES (LABELS) BY ( ci1 + q1 + v1 + ci2 + q2 + v2 + ci3 + q3 + v3 + ci4 + q4 + v4 + ci5 + q5 + v5 + ci6 + q6 + v6 + ci7 + q7 + v7 + ci8 + q8 + v8 + ci9 + q9 + v9 + ci10 + q10 + v10 + ci11 + q11 + v11 + ci12 + q12 + v12 + ci13 + q13 + v13 + ci14 + q14 + v14 + ci15 + q15 + v15 + ci16 + q16 + v16 + ci17 + q17 + v17 + ci18 + q18 + v18 + ci19 + q19 + v19 + ci20 + q20 + v20 ) /STATISTICS COUNT ((F5.0) '' ) CPCT ((PCT7.1) '')