Как изменить форму данных в SAS, сохранив форматы данных для дальнейшего экспорта в Excel?

У меня есть набор данных в SAS, который я хочу экспортировать в Excel в определенной таблице. Я хочу выполнить несколько операций с данными:

  1. Изменить форму данных
  2. Формат данных
  3. Экспорт в Excel

Вот пример набора данных.

data sample;
   input Product $ Year Metric1 Metric2 Metric3;
   datalines;
    A 2017 74 222 28895
    A 2018 45 235 15371
    B 2017 88 14 813
    B 2018 89 157 2304
    ;

В конечном итоге я хочу следующее.

введите здесь описание изображения

Используя proc transpose, я могу получить следующее, что близко, но не идеально.

proc transpose data=Sample out=transposed name=Metrics;
by Product ;
id Year;
var Metric1 Metric2 Metric3;
run;
proc print data=transpose noobs; run;

Цель

Проблема с этим выводом заключается в форматировании. Я не против добавить форматирование только при экспорте в Excel, но я просто не знаю, как это сделать. Итак, я думаю, мой вопрос состоит из двух разных частей:

  1. Могу ли я транспонировать свой набор данных sample с сохранением формата?
  2. Или я могу добавить форматирование к набору данных tranposed при экспорте в Excel, чтобы получить формат, показанный в 1.

person Emilie Picard-Cantin    schedule 26.03.2020    source источник
comment
PROC REPORT позволяет выполнять условное форматирование. Используйте ODS EXCEL в качестве метода экспорта, и вы можете использовать PROC REPORT для создания электронной таблицы.   -  person Tom    schedule 26.03.2020


Ответы (1)


Вы можете использовать CALL DEFINE() в PROC REPORT для установки свойств отображения. Используйте ODS EXCEL, чтобы направить отчет в файл Excel. В этом примере я буду использовать атрибут FORMAT, но вы, вероятно, захотите использовать атрибут STYLE, чтобы повлиять на то, как Excel будет отображать значения.

data sample;
   input Product $ Year Metric1 Metric2 Metric3;
   metric1=metric1/100;
datalines;
A 2017 74 222 28895
A 2018 45 235 15371
B 2017 88 14 813
B 2018 89 157 2304
;

proc transpose data=sample out=want ;
  by product year;
  var metric1-metric3 ;
run;

proc report data=want nofs headline ;
column product _name_ col1,year ;
define product / group;
define _name_ / group 'Metric';
define year/across ' ';
define col1/sum ' ';
compute col1 ;
  if (_name_='Metric1') then call define(_col_,'format','percent.');
  if (_name_='Metric2') then call define(_col_,'format','dollar.');
  if (_name_='Metric3') then call define(_col_,'format','comma.');
endcomp;
run;

Выход:

  Product   Metric         2017       2018
  ----------------------------------------
  A         Metric1        74%        45%
            Metric2        $222       $235
            Metric3      28,895     15,371
  B         Metric1        88%        89%
            Metric2         $14       $157
            Metric3         813      2,304
person Tom    schedule 26.03.2020