Динамическая макропеременная SAS - PullRequest
0 голосов
/ 15 октября 2018

У меня есть такой код SAS:

%if &tp. = kdb %then %do;
    %let sn = "&kdbsn.";
%end;
%if &tp. = bkb %then %do;
    %let sn = &bkbsn.;
%end;
%if &tp. = edw %then %do;
    %let sn = &edwsn.;
%end;
%if &tp. = odw %then %do;
    %let sn = &odwsn.;
%end;
%if &tp. = adw %then %do;
    %let sn = &adwsn.;
%end;

%put &sn;

Мне нужно сделать это для многих других случаев, и шаблон всегда одинаков.В зависимости от переменной &tp. я установил для переменной &sn. то же значение, что и для переменной с именем, первые 3 символа которого равны значению &tp. и два дополнительных символа sn.Есть ли функция, которая возвращает имя переменной, которая мне нужна, поэтому мне не нужно иметь бесконечное количество if операторов?

1 Ответ

0 голосов
/ 15 октября 2018

Вы добавляете больше &.Макропроцессор разрешает && в & и устанавливает для себя примечание для повторного сканирования токена для дальнейшей обработки макроса.

%let tp=kdb;
%let kdbsn=1234;
%let sn=&&&tp.sn ;

Итак && -> & и &tp. ->kdb для получения &kdbsn, которое разрешится до 1234.

...