Я предполагаю, что причина, по которой вы хотите искать название города по индексу города, состоит в том, чтобы повторно вызывать макрос с каждым названием города. Если это так, то вам даже не нужно вообще заниматься городским индексным бизнесом. Просто назовите макрос с каждым названием города. Есть много способов сделать это. Вот один из способов использования call execute()
.
data towns;
infile cards dlm=",";
input town :$char10. @@;
cards;
My Town,Your Town,His Town,Her Town
;
run;
%macro doTown(town=);
%put Town is &town..;
%mend doTown;
/* call the macro for each town */
data _null_;
set towns;
m = catx(town, '%doTown(town=', ')');
call execute(m);
run;
/* on log
Town is My Town.
Town is Your Town.
Town is His Town.
Town is Her Town.
*/
Если вам нужно выполнить поиск в таблице, то один из способов - преобразовать названия городов в числовой формат и написать простой макрос для получения имени с учетом значения индекса. Что-то вроде:
data towns;
infile cards dlm=",";
input town :$char10. @@;
cards;
My Town,Your Town,His Town,Her Town
;
run;
/* make a numeric format */
data townfmt;
set towns end=end;
start = _n_;
rename town = label;
retain fmtname 'townfmt' type 'n';
run;
proc format cntlin=townfmt;
run;
%macro town(index);
%trim(%sysfunc(putn(&index,townfmt)))
%mend town;
%*-- check --*;
%put %town(1),%town(2),%town(3),%town(4);
/* on log
My Town,Your Town,His Town,Her Town
*/