У меня есть набор данных (liste_institution
), которые содержат все имя переменной, которую я хочу «define
» в моем заявлении proc report
. Вот мой код, который работает, когда я вызываю свой макрос не динамически (%create_institution(815);
). Если я использую оператор данных с выполнением вызова (в комментарии в моем коде), он не работает. Причина в том, что, когда я использую вызов, код не интерпретируется в отчете PROC REPORT, поэтому он дает мне ошибку.Динамически создавать определение в PROC REPORT
proc report data = ventes_all_inst4
missing split = "*" nowd
style(header)=[font_weight=bold background = #339966 foreground = white]
style(column)=[cellwidth=15cm];
%macro create_institution(institution);
define TOTAL_&institution./display "TOTAL*($)" style(column)=[cellwidth=4cm];
%mend;
/* Give error when I use this data step */
/*data _null_;
set liste_institution;
call execute('%create_institution(' || INS || ');');
run;*/
%create_institution(815);
run;
Есть простой способ создать динамически определить заявление в ОТЧЕТЕ PROC из набора данных, которые содержат имя столбца.
Подход 'call execute' невозможен, но вам нужно будет сгенерировать весь блок proc report на шаге данных, а не только повторяющиеся биты. Подход Джо прекрасен до тех пор, пока вы не нажмете предел символов макропеременной. – user667489
Я не стал упоминать об этом, потому что я был бы в восторге от сообщения, в котором было достаточно 25-значных по времени столбцов, чтобы попасть в этот предел;) – Joe
Это работает, спасибо, теперь только процесс sql-оператор снова дает мне ошибку, например, если SAS пытается интерпретировать код, он отлично работает, когда я вызываю свою макроперемену в мой отчет о proc! – user1842455