Предоставление форматов макропеременным

#macros #sas #format

#макросы #sas #форматирование

Вопрос:

Меня действительно смущают форматы, заданные макропеременным. Выполняется попытка форматирования двух переменных. Один работает, а другой нет!

Код является:

 proc format;
    value classgrp
    1 = 'Total Resurfacing'
    2 = 'Cemented Total Conventional'
    3 = 'Cementless Total Conventional'
    4 = 'Hybrid Total Conventional'

    value hrtp
    1='0-1Mth'
    2='1Mth-'
    3='3Mth-'
    4='1Yr-'
    5='5Yr-'
    6='10Yr '
    ;
run;


%macro t(varfmt,tpfmt);
%do m=2 %to 3;
    %let mformat=%sysfunc(putn(amp;m., amp;varfmt.));
    %let tpformat=%sysfunc(putn(amp;m., amp;tpfmt.));

    %put ****variable amp;mformat.*****;
    %put ****time period amp;tpformat.*****;
%end;

%mend;

%t(varfmt=classgrp.,tpfmt=hrtp.);
  

Выходные данные

ПРЕДУПРЕЖДЕНИЕ: аргумент 2 для функции PUTN, на которую ссылается макрофункция %SYSFUNC или %QSYSFUNC, находится вне диапазона. **** переменная цементируется всего за обычный ***** *** период времени ***** ПРЕДУПРЕЖДЕНИЕ: аргумент 2 для функции PUTN, на которую ссылается макрофункция %SYSFUNC или %QSYSFUNC, находится вне диапазона. **** переменный бесцементный общий обычный ******** период времени *****

Только форматы classgrp успешно передаются в макропеременную «mformat». Итак, почему макропеременная tpformat не может получать форматы из hrtp?

Спасибо, Андреа

Комментарии:

1. Я не получаю никаких ошибок. Проверьте свой предыдущий код на наличие ошибок — в конце первого формата не хватает точки с запятой.

2. Ха, Риза, орлиный взор! Спасибо! Просто сосредоточился на аргументах, не обращал внимания на точки с запятой.