Сделайте SAS FIND/INDEX для поисковых терминов и поместите поисковый термин в новое поле (NewN), если найдено
С помощью этого кода я намерен выполнить динамический поиск в поле "Имя" и ввести поисковый термин (макропеременную sn_term&i), если он найден в NewN. У меня проблемы с выводом результатов; последний поисковый термин имеет тенденцию перезаписывать предыдущие. Заранее спасибо.
%macro mstrial;
data newlbname;
set SmplEHM;
%let i=1;
%Do %until(&i>&p);
select;
when ((find(Name,"&&sn_term&i"))GE 1)
%let Mvname= &&sn_term&i;
NewN = strip(symget('Mvname'));
otherwise ;
end;
%Let i=%eval(&i+1);
%end;
run;
%mend ;
1 ответ
Если я правильно понял, каждое значение имени может включать несколько поисковых терминов, поэтому вы используете цикл DO для просмотра всех терминов, верно? Тогда ожидается, что будет только последний найденный термин, потому что на каждой "успешной" итерации (когда термин найден) вы переписываете свою переменную NewN с текущим поисковым термином. Если вы хотите вывести их все в одну переменную, вы можете сделать конкатенацию следующим образом:
NewN=catx(",",NewN,&Mvname);
Кстати, есть ли конкретная причина для использования цикла DO WHILE? Было бы более кратким использовать DO TO:
%do i=1 %to &p;
...
%end;