SAS PROC REPORT Условный вывод в столбце - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь изучить SAS и, в частности, PROC REPORT.Я использую набор данных SASHELP.CARS.

Чего я хочу достичь в 6-м столбце выходных данных, помеченных как «Количество автомобилей> Среднее (счет)», чтобы вычислить количество автомобилей, чей Счет больше, чемГруппа означает счет-фактуру.Я использую код ниже.

PROC REPORT DATA=sashelp.CARS NOWD OUT=learning.MyFirstReport;
COLUMNS Type Origin INVOICE=Max_INVOICE INVOICE=Mean_Invoice 
INVOICE=Count_Invoice TEST DriveTrain;
DEFINE Type / Group 'Type of Car' CENTER;
DEFINE Origin / Group 'Origin of Car' CENTER;
DEFINE Max_Invoice / ANALYSIS MAX 'Max of Invoice';
DEFINE Mean_Invoice / ANALYSIS MEAN 'Mean of Invoice';
DEFINE Count_Invoice / ANALYSIS N FORMAT=5.0 'Total Number of Cars' center;
DEFINE DriveTrain / ACROSS 'Type of DriveTrain of Car';
DEFINE TEST / COMPUTED 'Number of Cars > Mean(Invoice)' center;
COMPUTE TEST;
     TEST=N(_c7_>Mean_Invoice);
ENDCOMP;
RUN;

Вывод, который я получаю, показан на рисунке ниже.

Вывод вышеуказанного кода SAS

Я не думаю, что это правильный вывод, так как все строки в столбце показывают значение 1. Как получить желаемый вывод в 6-м столбце вывода?

1 Ответ

0 голосов
/ 18 сентября 2018

Не групповые столбцы определяются для анализа совокупной статистики.Один из способов достижения подсчета логической оценки состоит в том, чтобы подготовить данные таким образом, чтобы сумма SUM для отдельного флага (0 или 1) представляла собой число положительных утверждений.

Подготовка

proc sql;
  create view cars_v as
  select *
  , mean(invoice) as invoice_mean_over_type_origin
  , (invoice > calculated invoice_mean_over_type_origin) as flag_50
  from sashelp.cars
  group by type, origin
  ;

Отчет

PROC REPORT DATA=CARS_V OUT=work.MyFirstReport;
COLUMNS 
  Type 
  Origin 
  INVOICE/*=Max_INVOICE */
  INVOICE=INVOICE_use_2/*=Mean_Invoice */

  flag_50
  flag_50=flag_50_use_2

  flag_50_other
  DriveTrain
;
  DEFINE Type / Group 'Type of Car' CENTER;
  DEFINE Origin / Group 'Origin of Car' CENTER;
  DEFINE Invoice / ANALYSIS MAX 'Max of Invoice';
  DEFINE Invoice_use_2 / ANALYSIS MEAN 'Mean of Invoice';

  DEFINE flag_50 / analysis sum  'Number of Cars > Mean ( Invoice )' center;

  DEFINE flag_50_use_2 / noprint analysis N  ;
  * noprint makes a hidden column whose value is available to compute blocks;

  DEFINE flag_50_other / computed 'Number of Cars <= Mean ( Invoice )' center;
  DEFINE DriveTrain / ACROSS 'Type of DriveTrain of Car';

  compute flag_50_other;
    flag_50_other = flag_50_use_2 - flag_50.sum;
  endcomp;
RUN;
  • В новых версиях SAS NOWD является параметром по умолчанию.Новый код Proc REPORT не должен указывать его явно.
  • Повторно использовать переменную, такую ​​как invoice=mean_invoice, можно, но у будущего читателя кода может возникнуть некоторое недопонимание при просмотре строки кода DEFINE Mean_Invoice / ANALYSIS MEAN 'Mean of Invoice';- это определение для среднего значения или среднего значения ?
...