Select 对搜索词进行SAS查找/索引,如果找到,则将搜索词放入新字段(NewN)

Select 对搜索词进行SAS查找/索引,如果找到,则将搜索词放入新字段(NewN),select,while-loop,find,sas,select-until,Select,While Loop,Find,Sas,Select Until,使用这段代码,我打算在Name字段中进行动态搜索,如果在NewN中找到,则输入搜索词(宏变量sn_term&I)。 我在输出结果时遇到问题;最后一个搜索词往往会覆盖前一个搜索词。提前谢谢 %macro mstrial; data newlbname; set SmplEHM; %let i=1; %Do %until(&i>&p); select; when ((find(Name,"&&sn

使用这段代码,我打算在Name字段中进行动态搜索,如果在NewN中找到,则输入搜索词(宏变量sn_term&I)。 我在输出结果时遇到问题;最后一个搜索词往往会覆盖前一个搜索词。提前谢谢

%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 ;

如果我没弄错的话,每个名称值可能包含多个搜索词,这就是为什么要使用DO循环遍历所有词,对吗?那么它应该只有最后找到的术语,因为在每次“成功”的迭代中(当找到术语时),您都在用当前搜索术语重新编写NewN变量。如果希望在一个变量中输出所有变量,则可以执行如下连接:

NewN=catx(",",NewN,&Mvname);
顺便问一下,使用DO WHILE循环有什么具体的原因吗?使用DO更简洁:

%do i=1 %to &p;

  ...

%end;