2014-09-23 4 views
1

Я пытаюсь создать таблицу, как это: DemogSAS Proc Tabulate

Вот мой код, который не работает:

proc tabulate data=temp out = t1; 
    class age gender ethnic height TRT TREATGR; 
    table ethnic * (N) gender * (N) age * (n mean median min max) height * (n mean median min max), 
     TREATGR*TRT*N; 
run; 

Вот лог:

127 прок Tabulate данных = temp out = t1; 128 класс возраст пол этнический рост TRT TREATGR; 129 таблица этническая * (N) пол * (N) возраст * (n средняя средняя высота) высота * (n средняя средняя мин. 129! Max), 130 TREATGR TRT N; 131 run;

ОШИБКА: Есть несколько статистиков, связанных с одной ячейкой таблицы в следующей вложенности: ETHNIC * N * TREATGR * TRT * N. ОШИБКА: Есть несколько статистиков, связанных с одной ячейкой таблицы в следующей вложенности: GENDER * N * TREATGR * TRT * N. ОШИБКА: Существует несколько статистических данных, связанных с одной ячейкой таблицы, в следующем вложенности: ВОЗРАСТ * N * TREATGR * TRT * N. ОШИБКА: Статистическая информация, отличная от N, запрашивалась без переменная анализа в следующем вложенности: AGE * Среднее * TREATGR * TRT * N. ОШИБКА: Статистическая информация, отличная от N, запрашивалась без аналитической переменной в следующем вложенности: ВОЗРАСТ * Медиана * TREATGR * TRT * N. ОШИБКА: Статистическая информация, отличная от N, запрашивалась без аналитической переменной в следующем вложенности: ВОЗРАСТ * Мин * TREATGR * TRT * N. ОШИБКА: Статистические данные, отличные от N, были запрошены без анализа переменная в следующем гнезде: AGE * Max * TREATGR * TRT * N. ОШИБКА. Существует несколько статистических данных, связанных с одной ячейкой таблицы, в следующем вложенности: ВЫСОТА * N * TREATGR * TRT * N. ОШИБКА: статистика кроме N, запрашивается без переменной анализа в следующем вложенности: ВЫСОТА * Среднее * TREATGR * TRT * N. ОШИБКА: Статистическая информация, отличная от N, запрашивалась без аналитической переменной в следующем вложенности: HEIGHT * Median * TREATGR * TRT * N. ОШИБКА: Статистическая информация, отличная от N, была запрошена без аналитической переменной в следующей вложенности: HEIGHT * Min * TREATGR * TRT * N. ОШИБКА: Статистические данные, отличные от N, были запрошены без анализа переменная в следующем вложенности: HEIGHT * Max * TREATGR * TRT * N. ПРИМЕЧАНИЕ. Система SAS прекратила обработку этого шага из-за ошибок. ПРЕДУПРЕЖДЕНИЕ. Набор данных WORK.T1 может быть неполным. Когда этот шаг был остановлен, наблюдалось 0 наблюдений и 0 переменных. ВНИМАНИЕ: Набор данных WORK.T1 не был заменен, потому что этот шаг был остановлен. Примечание: ПРОЦЕДУРА Tabulate используется (Общее время процесса): в реальном масштабе времени время 0,01 секунды процессор 0.01 секунды

Но это работает

proc tabulate data=temp out = t1; 
    class age gender ethnic height TRT TREATGR; 
    table ethnic gender age height , 
    TREATGR*TRT*N; 
run; 

Но лита все возраста и высоты.

ответ

2

Переменные CLASS используются только для «разрезов» данных, то есть для определения строк/столбцов. Если вам нужен средний/средний/и т. Д., то есть содержимое «середины» таблицы, тогда у вас есть два варианта:

  • Используйте n или pctn (или аналогичные). Затем вы получаете эффективную переменную 'dummy', которая равна 1 для каждой добавляемой строки.
  • Добавить переменную var, которая является переменной анализа и может использоваться для средних/медианных/и т. Д.

Переменные класса также могут быть переменными анализа, но они должны быть объявлены как таковые (и часто это не делает именно то, что вы хотите из-за взаимодействия между переменными класса и анализа).

В вашем случае age и height явно не предназначены для классификации; они являются переменными анализа. Вы не получаете счет за каждое уникальное значение, а сводную статистику.

К вашей более сложной проблеме вам не хватает чего-то фундаментального в отношении PROC TABULATE таблиц, которые слишком длинны, чтобы войти сюда; прочитайте несколько руководств. Как минимум, вы смущены тем, как работают строки, столбцы и взаимодействия; все эти * ведут к совсем другой таблице, чем вы ищете. Пробел разделяет объекты, объединенные на одной оси, а запятая разделяет строки из столбцов, а звездочка - внутри измерения. Поэтому, оставляя в стороне другие вопросы, вам нужно что-то вроде

table (race gender age height)*(n pctn),treatgr; 

ордена является (таблица/страница), (строка), (цв).

Чтобы получить среднее/медианное, я не думаю, что вы можете сделать именно это; но если бы вы могли, это было бы что-то вроде

table (age*mean age*median age*n age*min age*max),treatgr; 

Пример таблицы не слишком далеко от вашего:

proc tabulate data=sashelp.class; 
    var height weight; 
    class sex age; 
    table age,sex*(n colpctn); 
    table (height*n height*mean height*median height*min height*max) 
     (weight*n weight*mean weight*median weight*min weight*max),sex; 
run; 

Это не идеально, и я подозреваю, что это не возможно сделать именно то, что вы хотите в одной таблице TABULATE (или два, как указано выше); вам придется использовать PROC REPORT, чтобы заставить его выглядеть точно так.

+0

Хорошо спасибо. У меня есть идея. – HeisenBerg

+0

и как мне получить эти процентные значения в скобках? как X (XX). Должен ли я найти X и (XX) отдельно и объединить их в новую переменную. Но это утомительная работа. Есть ли другой способ? – HeisenBerg

+0

Вы можете использовать формат изображения для столбцов pctn, который отображает числа в круглых скобках. – Joe

Смежные вопросы