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

У меня есть набор данных в 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
    ;

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

enter image description here

Используя 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;

Goal

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

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

1 Ответ

2 голосов
/ 26 марта 2020

Вы можете использовать CALL DEFINE () в PRO C 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
...