Я знаю, что это было открыто некоторое время, но я тоже некоторое время боролся с этим, и это то, что я понял. Итак ...
Короче говоря, в SAS возникают проблемы с выводом красиво отформатированных таблиц, которые содержат в себе более одного типа «формата» таблиц. Например, таблица, где столбцы изменяются на полпути (как вы обычно находите в «Таблице 1» исследования, описывающего исследуемую популяцию).
В этом случае вы пытаетесь использовать PROC REPORT, но я не думаю, что это сработает здесь. Что вы хотите сделать, так это наложить два разных отчета друг на друга. Вы изменяете значение столбца на полпути, и SAS изначально не поддерживает это.
Некоторые альтернативные подходы:
Выполните все свои расчеты и аккуратно выведите их в набор данных в SAS в нужных вам положениях. Затем используйте PROC PRINT для их печати. Это то, что я могу описать только как огромное усилие.
Создайте новый TAGSET, который позволяет выводить несколько файлов, но удаляет интервал между каждым из них и выравнивает их по одинаковой ширине, эффективно создавая одну таблицу. Это также довольно много времени; Я попытался сделать это, используя HTML с пользовательским CSS-файлом и набором тегов, и это было не очень легко.
Используйте другую процедуру (в данном случае, PROC TABULATE), а затем вручную удалите интервал между каждой таблицей и скрипкой с шириной, чтобы получить финальную таблицу. Это не полностью автоматизировано, но, вероятно, это самый быстрый вариант.
PROC TABULATE - это круто, потому что вы можете использовать несколько операторов таблицы в одном примере. Ниже я поместил код, который показывает, о чем я говорю.
DATA survey;
INPUT id grp var1 var2 var3 var4 var5;
DATALINES;
1 1 35 17 7 2 2
17 1 50 14 5 5 3
33 1 45 6 7 2 7
49 1 24 14 7 5 7
65 2 52 9 4 7 7
81 2 44 11 7 7 7
2 2 34 17 6 5 3
18 2 40 14 7 5 2
34 2 47 6 6 5 6
50 2 35 17 5 7 5
;
RUN;
Я нашел ваш пример кода немного запутанным; var1 выглядел как переменная группировки, а var2 выглядел как первая фактическая переменная анализа, поэтому я немного изменил код. Затем я быстро создал тот же формат, который вы использовали раньше.
PROC FORMAT;
VALUE groupft 1 = 'Group A' 2 = 'Group B';
RUN;
DATA survey;
SET survey;
LABEL var1 ='Variable 1';
LABEL var2 ='Fancy variable 2';
LABEL var3 ='Another variable no 3';
FORMAT var1 groupft.;
RUN;
Теперь, суть оператора PROC TABULATE.
PROC TABULATE DATA=survey;
CLASS grp;
VAR var1--var5;
TABLE MEDIAN QRANGE,var1;
TABLE grp,var2*(N PCTN);
RUN;
TABULATE в основном работает с запятыми и звездочками для разделения вещей. Значением по умолчанию для чего-то вроде grp * var1 является вывод, в котором столбец является первой переменной, а затем для каждой подгруппы имеются подколонки. Чтобы добавить строки, вы используете столбец; чтобы указать, какую статистику вы хотите, вы добавляете ключевое слово.
Приведенный выше код дает вам нечто похожее на то, что было в вашем первом примере (не в формате ODS, но я думаю, вы можете добавить это обратно); это просто в двух разных таблицах.
Я нашел следующие документы полезными, когда решал эту проблему:
http://www.lexjansen.com/pharmasug/2005/applicationsdevelopment/ad16.pdf
http://www2.sas.com/proceedings/sugi31/089-31.pdf