Ошибка заголовка отчета SAS Proc

У меня есть проблема, когда цикл do создает мои отчеты, однако титульная страница, на которой указан макрос, каждый раз не отражает правильное соглашение об именах. Он работает для каждой из закладок в PDF, а также для самого отчета о процессе. Однако названия не отражают правильно.

%macro PDF_T2(year=,  age= );

proc sql noprint;
select distinct region,  bh_type
      into :region1 - :region14, :bh_type1 -  :bh_type14
      from table2_IP
;
quit;

/*%put &region1 &region2;*/
/*%put &bh_type1 &bh_type2;*/

ods escapechar '^';
ods pdf file="C:\PDFS\Table2.pdf" pdftoc=2 style=Custom;

options orientation=landscape missing=' '

topmargin=.25in 
bottommargin=.25in
leftmargin=.25in rightmargin=.25in ;

ods proclabel " Inpatient Analysis By Plan ";


%do i=1 %to 4;


TITLE  "^{style [JUST= C ]Table 2. Inpatient Utilization By Plan,}";
TITLE2 "^{style [JUST= C ]&&region&i.  }" ;
Title3 "^{style [JUST= C ]Adult (21 to 64)}";
Title4 "^{style [JUST= C ]&&bh_type&i. Analysis}"  ;

PROC REPORT DATA =  Table2_IP contents="&&bh_type&i. Table: Inpatient`enter code here`

person Tinkinc    schedule 19.02.2016    source источник
comment
Какие титулы вы получаете и чем они неверны?   -  person Quentin    schedule 19.02.2016
comment
Обычно я получаю последний из цикла вместо правильного для периода времени = t1. Таким образом, для T1 &&BH_TYPE или &®ION будет указывать t2 и так далее. Как будто заголовок не очищается перед повторной отправкой цикла.   -  person Tinkinc    schedule 19.02.2016
comment
Не забудьте добавить оператор RUN; в конце шага PROC REPORT. В противном случае отчет не запустится, пока не увидит границу следующего шага. Обычно это будет PROC REPORT шаг в следующем цикле. К тому времени заголовки уже будут изменены на значения для следующего экземпляра цикла.   -  person Tom    schedule 19.02.2016
comment
Хороший звонок @Tom. Я думаю, ты попал в точку. Может быть, сделать это ответом.   -  person Quentin    schedule 19.02.2016


Ответы (1)


Я бы попробовал убедиться, что вы используете макропеременные% local. Если у вас есть плавающие глобальные макропеременные, это может привести к неожиданным результатам.

Я бы также включил MPRINT и посмотрел журнал, чтобы увидеть, какой код генерируется. Он покажет операторы TITLE, которые генерирует макрос.

Заголовки не очищаются сами по себе, но каждый раз, когда выполняется оператор TITLE, он очищает все существующие заголовки.

Я немного изменил ваш код, чтобы он работал с sashelp.prdsale, и все в порядке:

%macro titletest(dummy);
%local i region1 region2;

proc sql noprint;
select distinct region
      into :region1 - :region2
      from sashelp.prdsale
;
quit;

%put region1=&region1 region2=&region2;

%do i=1 %to 2;
  title1 "Results for &&region&i";
  proc print data=sashelp.prdsale;
    where region="&&region&i";
  run;
  title1;
%end;

%mend;

options mprint;
%titletest()
person Quentin    schedule 19.02.2016