Фиксирую на будущее ещё одно решение рабочей задачи.
Задача следующая: в таблице в одном из столбцов значения сформированы текстом с переносами строк. И в этом тексте в пределах одного значения строки могут повторяться. И эти дубликаты нужно убрать. Не исключаю, что поиски решения привели меня к написанию велосипеда, но если кто знает вариант получше - не держите в себе, поделитесь.
Схематичный исходник и пояснения - под катом:
/* === Начальные данные === */
data in; /* Здесь только одно значение, одна строка */
a=catx('0A'x,'abc','abcd','abc','abce','abc');
run;
/* === Основная магия тут === */
data out(drop=i j e:);
set in;
array e{5} $ 100;
do i=1 to 5 by 1;
e{i}=SCAN(a, i, '0A'x); /* Берём i-ю строку из переменной a и помещаем в i-й элемент массива e */
if i>1 then do; /* А вот тут интересно. Если это вторая строка и далее, то мы пробегаем предыдущие строки и сравниваем с ними текущую строку */
do j=1 to i-1 by 1;
if e{i} eq e{j} then e{i}=" "; /* И если она уже была - нещадно вымарываем */
end;
end;
end;
a="";
do i=1 to 5 by 1; /* А теперь собираем значение переменной заново, соединяя строки через перевод строки */
if not missing(e{i}) then a=catx('0A'x,a,e{i});
end;
run;
Результат работы будет выглядеть вот так: