SAS-Динамическое написание гистограмм в книгу Excel в макросе SAS

Я пытаюсь динамически генерировать и экспортировать гистограммы и книгу 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;

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 сделать диаграмму здесь, пожалуйста).

Другие вопросы по тегам