Объедините данные из нескольких строк в SAS, если несколько идентификаторов, включая добавление некоторых переменных

#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. Большое спасибо, Стю — это работает как волшебство 🙂