#sas
Вопрос:
Надеюсь, вы сможете помочь с решением, будь то SQL или этап обработки данных.
Мне нужно объединить несколько строк, если идентификатор клиента одинаков, и добавить несколько переменных с кодом.
У меня есть следующие контейнеры статических переменных:
%let FirstColSuffix=<Somecode1>
%let SecondColSuffix=#<SomeCode2>
%let ThirdColSuffix=#<SomeCode3>
Данные имеют;
Customerid Firstcol Secondcol Thirdcol
1 A1 A2 A3
2 B1 B2 B3
2 C1 C2 C3
2 D1 D2 D3
3 E1 E2 E3
3 F1 F2 F3
3 G1 G2 G3
3 H1 H2 H3
Данные нужны;
Customerid Firstcol Secondcol Thirdcol Result
1 A1 A2 A3 A1<SomeCode1>A2#<SomeCode2>A3#<SomeCode3>
2 B1 B2 B3 B1<SomeCode1>B2#<SomeCode2>B3#<SomeCode3>
2 C1 C2 C3 B1<SomeCode1>B2#<SomeCode2>B3#<SomeCode3>C1<SomeCode1>C2#<SomeCode2>C3#<SomeCode3>
2 D1 D2 D3 B1<SomeCode1>B2#<SomeCode2>B3#<SomeCode3>C1<SomeCode1>C2#<SomeCode2>C3#<SomeCode3>D1<SomeCode1>D2#<SomeCode2>D3#<SomeCode3>
3 E1 E2 E3 E1<SomeCode1>E2#<SomeCode2>E3#<SomeCode3>
3 F1 F2 F3 E1<SomeCode1>E2#<SomeCode2>E3#<SomeCode3>F1<SomeCode1>F2#<SomeCode2>F3#<SomeCode3>
3 G1 G2 G3 E1<SomeCode1>E2#<SomeCode2>E3#<SomeCode3>F1<SomeCode1>F2#<SomeCode2>F3#<SomeCode3>G1<SomeCode1>G2#<SomeCode2>G3#<SomeCode3>
3 H1 H2 H3 E1<SomeCode1>E2#<SomeCode2>E3#<SomeCode3>F1<SomeCode1>F2#<SomeCode2>F3#<SomeCode3>G1<SomeCode1>G2#<SomeCode2>G3#<SomeCode3>H1<SomeCode1>H2#<SomeCode2>H3#<SomeCode3>
Мне нужен вывод только в том случае, если последний идентификатор клиента (но с данными из всех соответствующих идентификаторов клиентов, выведенных в последней строке в столбце «результат».
Поэтому в этом примере мне нужны строки 1, 4 и 8
Кто-нибудь может помочь? 🙂
Комментарии:
1. Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией для определения адекватного ответа.
Ответ №1:
Использование retain
и групповая обработка. Мы будем постоянно связываться с result
самим собой для каждой прочитанной строки и переносить это значение вперед. Мы выведем данные по последнему идентификатору клиента. При первом идентификаторе клиента result
происходит сброс.
data want;
set have;
by Customerid;
length Result $500.;
retain Resu<
if(first.Customerid) then call missing(Result);
Result = cats(Result, FirstCol, "amp;FirstColSuffix", SecondCol, "amp;SecondColSuffix", ThirdCol, "amp;ThirdColSuffix");
if(last.Customerid);
run;
Комментарии:
1. Спасибо, Стю, но я получаю ошибку в first.id
2. Это потому, что в нем должно быть указано, если (first.customerid), а не если (first.id) ??
3. Правильно, извините за это, я использовал тестовые данные и забыл обновить переменную. Я исправил это в посте.
4. Большое спасибо, Стю — это работает как волшебство 🙂