Хроники лаборатории
Дублирующиеся строки внутри одной ячейки. SAS Base/Macro

Фиксирую на будущее ещё одно решение рабочей задачи.

Задача следующая: в таблице в одном из столбцов значения сформированы текстом с переносами строк. И в этом тексте в пределах одного значения строки могут повторяться. И эти дубликаты нужно убрать. Не исключаю, что поиски решения привели меня к написанию велосипеда, но если кто знает вариант получше - не держите в себе, поделитесь.

Схематичный исходник и пояснения - под катом:
/* === Начальные данные === */

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;


Результат работы будет выглядеть вот так:

WORK.IN

#a
1abc
abcd
abc
abce
abc

WORK.OUT

#a
1abc
abcd
abce


RSS HTML рубрики: рабочееjuick twitter facebook вконтакте

Случайные записи впридачу:
Гениальный аукцион (FAQ)
Моя видеополитика (FAQ)
All hail Megatron! (жизненное)

Откуда вы?   

Войти через loginza
Оставлять комментарии могут только
имеющие свой ЖЖ-, ЛИру-аккаунт или
еще какой openID (как так?).
Подписаться


Рубрики:

жизненное
аудио-я
видеомонтаж
фотоохота
ремонт
стихи
рассказы
синематограф
библиотека
фонотека
точка зрения
FAQ
приемчики
придумалось
ожидания-прогнозы
допридумано
рингтоны
это я так шучу
обои
микрозарисовки
опасный Интернет
я в печати
поездки-тусовки
смехоспам
мой код
футболки
игродром
подводная жизнь
сайтоводство
программы
персоны
LI.ru
аватарки
курсоры


Разное:

Полка с фильмами
Книжная полка
Полка с играми
Избранное


Календарь записей

2021 (1)
2020 (7)
2019 (3)
2018 (1)
2017 (10)
2016 (12)
2015 (3)
2014 (12)
2013 (10)
2012 (17)
2011 (84)
2010 (172)
2009 (228)
2008 (263)
2007 (154)
2006 (4)
2005 (1)
2004 (1)
2002 (1)
2001 (9)
2000 (9)
1999 (1)
© сайт разработан и поддерживается мной.