Набор данных HAVE
включает в себя id
значения и символьную переменную names
.Значения в names
обычно отсутствуют.Если names
отсутствует для всех значений id
, КРОМЕ одного, поля для идентификаторов с пропущенными значениями в names
могут быть удалены.Если names
полностью отсутствует для всех id
определенного значения (например, id
= 2 или 5 ниже), одна запись для этого значения id
должна быть сохранена.
Другими словами,Мне нужно превратить HAVE
:
id names
1
1
1 Matt, Lisa, Dan
1
2
2
2
3
3
3 Emily, Nate
3
4
4
4 Bob
5
в WANT
:
id names
1 Matt, Lisa, Dan
2
3 Emily, Nate
4 Bob
5
В настоящее время я делаю это, удаляя все записи, в которых отсутствует names
, затем объединяя результатына новый набор данных KEY
с одной переменной id
, которая содержит все исходные значения (1, 2, 3, 4 и 5):
data WANT_pre;
set HAVE;
if names = " " then delete;
run;
data WANT;
merge KEY
WANT_pre;
by id;
run;
Это идеально подходит для HAVE
, потому что я знаючто id
- это набор числовых значений в диапазоне от 1 до 5. Но я менее уверен, как я мог бы сделать это эффективно (A) для файла гораздо большего размера и (B), если бы я не мог просто создать идентификаторKEY
набор данных, считая от 1 до n.Если бы у ваших HAVE
было несколько миллионов наблюдений, а ваши значения id
были более сложными (например, шестнадцатеричные значения, такие как XR4GN), как бы вы получили WANT
?