Вот подход, основанный на scan
.Я предположил, что у вас есть максимум 3 фразы на строку, но это легко можно настроить, чтобы работать с любым количеством фраз, если это необходимо.
data have;
string = 'Lymph node pain/Pain in extremity/Pain in extremity';output;
string = 'Lymph node pain/Lymph node pain/Pain in extremity'; output;
string = 'Lymph node pain/Neuralgia/Neuralgia'; output;
string = 'Neuralgia/Lymph node pain/Neuralgia'; output; /*Added A/B/A example*/
run;
data test;
set have;
array phrases[3] $32;
/*Separate string into an array of phrases delimited by / */
do i = 1 to dim(phrases);
phrases[i] = scan(string,i,'/');
end;
/*Sort the array so that duplicate phrases are next to each other*/
call sortc(of phrases[*]);
/*Iterate through the array and build up an output string of non-duplicates*/
length outstring $255;
do i = 1 to dim(phrases);
if i = 1 then outstring = phrases[1];
else if phrases[i] ne phrases[i-1] then outstring = catx('/',outstring,phrases[i]);
end;
keep string outstring;
run;
У этого есть побочный эффект сортировки всех фразв алфавитном порядке, а не в порядке первого появления в строке.