SAS-динамическая запись столбчатых диаграмм в книгу Excel в SAS Macro

Я пытаюсь динамически генерировать и экспортировать гистограммы в книгу Excel. Мой макрос извлекает определенные отдельные коды идентификаторов и создает две сводные таблицы (таблицу prov_&x и таблицу prov_revcd_&x) и заполняет их на одном листе Excel для каждого соответствующего идентификатора. Однако мне не удалось успешно создать гистограммы для данных и экспортировать их в Excel. Ниже приведена сокращенная версия кода. Я удалил шаги по созданию таблицы prov_&x и таблицы prov_revcd_&x, чтобы сообщение было максимально кратким. Я пробовал использовать функцию GOUT и функцию NAME, а затем явно вызывать их, но, похоже, это не работает. Любые предложения приветствуются, и я понимаю, что мой код макроса немного неряшлив, но он генерирует таблицы, поэтому я почищу, как только смогу сгенерировать гистограммы.

Кроме того, я вижу в своем средстве просмотра результатов, что графики генерируются, поэтому я предполагаю, что проблема заключается в том, как я пытаюсь сослаться на них в книгу. СПАСИБО!

%macro runtab(x);

/*Create summary chart for generating graph of codes billed per month*/
proc sql;
CREATE TABLE summary_&x AS
select DISTINCT month, COUNT (CH_ICN) AS ICN_Count, CLI_Revenue_Cd_Category_Cd
FROM corf_data1_sorted
WHERE BP_Billing_Prov_Num_OSCAR=&x
group by month ,CLI_Revenue_Cd_Category_Cd;
run;

/*Create a graph of Services Per Month and group by the Revenue Code*/
proc sgplot data=summary_&x NAME= 'graph_&x';
  title 'Provider Revenue Analysis';
  vbar month / response=ICN_count group=CLI_Revenue_Cd_Category_Cd stat=sum
       datalabel datalabelattrs=(weight=bold);
  yaxis grid  label='Month';
  run;
%mend runtab;


/*Create a macro variable of all the codes */
proc sql noprint;
  select BP_Billing_Prov_Num_OSCAR
  into :varlist separated by ' ' /*Each code in the list is sep. by a single space*/
from provider;
quit;


%let cntlist = &sqlobs; /*Store a count of the number of oscar codes*/
%put &varlist; /*Print the codes to the log to be sure our list is accurate*/



/*write a macro to generate the output tables*/
%macro output(x);


ods tagsets.excelxp options(sheet_interval='none' sheet_name="&x");

proc print data=prov_&x;
run;

proc print data=prov_revcd_&x;
run;

proc print data=graph_&x;
run;  

%mend;

/*Run a loop for each oscar code. Each code will enter the document generation loop*/
%macro loopit(mylist);
    %let else=;
   %let n = %sysfunc(countw(&mylist)); /*let n=number of codes in the list*/
    data
   %do I=0 %to &n;
      %let val = %scan(&mylist,&I); /*Let val= the ith code in the list*/
    %end;


   %do j=0 %to &n;
      %let val = %scan(&mylist,&j); /*Let val= the jth code in the list*/
/*Run the macro loop to generate the required tables*/
%runtab(&val);


%output(&val);


   %end;
   run;
%mend;


/*Run the macro loop over the list of significant procedure code values*/


ods tagsets.excelxp file="W:\user\test_wkbk.xml";


%loopit(&varlist)


ods tagsets.excelxp close;

person Brad    schedule 26.05.2015    source источник


Ответы (1)


К сожалению, вы не можете экспортировать диаграммы с помощью ODS TAGSETS.EXCELXP.

У вас есть несколько вариантов, если вам нужно экспортировать диаграммы.

  1. Используйте ODS Excel, доступный в более поздних версиях обслуживания SAS 9.4. См. запись в блоге Криса Х. для получения дополнительной информации об этом. Он очень похож на Tagsets.ExcelXP, но не идентичен. Он создает «настоящий» файл Excel (.xlsx).
  2. Создайте файл HTML, который Excel сможет прочитать, используя TAGSETS.MSOFFICE2K или обычный HTML. У Чевелла Паркера, аналитика службы технической поддержки SAS, есть несколько документов, таких как один для разных вариантов.
  3. Используйте DDE для записи изображения в файл Excel. Не является предпочтительным вариантом, но включен для полноты картины.

Существует также новый процесс — proc mschart — включенный в SAS 9.4 TS1M3, который должен выйти через месяц или два и который будет генерировать диаграммы Excel в ODS EXCEL (т. е. не изображение, а указание Excel сделать здесь диаграмму, пожалуйста).

person Joe    schedule 26.05.2015
comment
Спасибо за ваши предложения @Joe! - person Brad; 26.05.2015