Я хочу вычислить несколько сумм в одном столбце на основе некоторых критериев. Вот небольшой пример использования набора данных sashelp.cars
.
Приведенный ниже код в некоторой степени достигает того, что я хочу сделать, тремя (3) разными способами, но всегда есть небольшая проблема.
proc report data=sashelp.cars out=test2;
column make type,invoice type,msrp;
define make / group;
define type / across;
define invoice / analysis sum;
define msrp / analysis sum;
title "Report";
run;
proc print data=test2;
title "Out table for the report";
run;
proc summary data=test nway missing;
class make type;
var invoice msrp;
output out=sumTest(drop= _Freq_ _TYPE_) sum=;
run;
proc transpose data=sumTest out=test3;
by make;
var invoice msrp;
id type;
run;
proc print data=test3;
title "Table using proc summary followed by proc transpose";
run;
proc sql undo_policy=none;
create table test4 as select
make,
sum(case when type='Sedan' then invoice else 0 end) as SedanInvoice,
sum(case when type='Wagon' then invoice else 0 end) as WagonInvoice,
sum(case when type='SUV' then invoice else 0 end) as SUVInvoice,
sum(case when type='Sedan' then msrp else 0 end) as Sedanmsrp,
sum(case when type='Wagon' then msrp else 0 end) as Wagonmsrp,
sum(case when type='SUV' then msrp else 0 end) as SUVmsrp
from sashelp.cars
group by make;
quit;
run;
proc print data=test4;
title "Table using SQL queries and CASE/WHEN to compute new columns";
run;
Вот результат, который я получаю, когда запускаю представленный код.
Первые две таблицы представляют результат и выходную таблицу report
процедура. Проблема, с которой я сталкиваюсь при таком подходе - это имена столбцов, создаваемые proc report
. Я хотел бы иметь возможность определить их сам, но я не понимаю, как я могу это сделать. Это важно для дальнейших ссылок.
Третья таблица представляет результат части кода proc summary
/ proc transpose
. Проблема с этим подходом заключается в том, что Invoice
и MSRP
отображаются в виде строк в таблице, а не столбцов. По этой причине я думаю, что proc report
лучше.
Последняя таблица представляет использование запроса SQL
. Результат именно то, что я хочу, но код тяжелый. Мне нужно сделать много похожих вычислений для моего набора данных, и я считаю, что этот подход громоздок.
Не могли бы вы помочь улучшить один из этих методов?