Используя Proc Report, как вы можете применить формат к столбцам, созданным из переменной Across? - PullRequest
1 голос
/ 08 марта 2012

Следующий код даст счетчик ТИПА для каждой группы MAKE

proc report data=sashelp.cars nowd;
 column make type;
 define make / group;
 define type / across;
run;

Как можно применить формат к созданным столбцам?

1 Ответ

1 голос
/ 08 марта 2012

В приведенном ниже коде отображается счет переменной ACROSS. Однако это можно сделать явным образом, используя запятую в операторе COLUMN после переменной ACROSS. Затем столбец N можно отформатировать в операторе DEFINE.

proc report data=sashelp.cars nowd;
 column make type,n;
 define make / group;
 define type / across;
 define n / '' format=comma10.1;
run;

Когда будет несколько столбцов, уникальное форматирование столбцов может быть выполнено в блоке COMPUTE. Чтобы посмотреть, как будут выглядеть столбцы, используйте оператор OUT = в строке PROC REPORT, чтобы сгенерировать набор данных. Включение опции MISSING = может заменить отсутствующие точки нулями. Книга Арт Карпентера - превосходное руководство к отчету Proc ... и откуда я взял этот совет .

Options missing=0;
proc report data=sashelp.cars nowd out=work.report;
 column make type,n;
 define make / group;
 define type / across;
 define n / '';

 compute n;
  call define('_c4_','format','dollar10.');
 endcomp;
run;

Каждый раз, когда используется ссылка на абсолютный столбец (например, ____c4____), существует вероятность ошибки, когда этот столбец не существует. Создание пользовательского формата и использование PRELOADFMT в операторе DEFINE для этой переменной ACROSS приведут к появлению всех значений формата и гарантированию существования ____c4____. См. этот вопрос для получения дополнительной информации.

options missing=.;

Proc format;
 value $type
 'Hybrid'='Hybrid' 'SUV'='SUV' 'Sedan'='Sedan'
 'Sports'='Sports' 'Truck'='Truck' 'Wagon'='Wagon';
Run;

Proc Report data=sashelp.cars(where=(make='Buick')) nowd;
 column make type,n;
 define make / group;
 define type / across format=$type. preloadfmt;
 define n / '';

 compute n;
  call define('_c4_','format','dollar10.');
 endcomp;

run;

Еще одно редактирование: коллега показал мне, что, "закрыв" все метки в операторах определения, можно удалить пустое пространство под переменными. В этом примере, поскольку переменная группы (MAKE) теперь не имеет метки, ей нужна метка в операторе столбца.

options missing=.;

Proc format;
 value $type
 'Hybrid'='Hybrid' 'SUV'='SUV' 'Sedan'='Sedan'
 'Sports'='Sports' 'Truck'='Truck' 'Wagon'='Wagon';
Run;

proc report data=sashelp.cars(where=(make='Buick')) nowd;
 column ('Make' make) type,n;
 define make / '' group;
 define type / '' across format=$type. preloadfmt;
 define n / '';

 compute n;
  call define('_c4_','format','dollar10.');
 endcomp;

run;
...