Группировка успехов в SAS по нескольким строкам по идентификатору, где как минимум 1 успех считается успехом - PullRequest
0 голосов
/ 13 июля 2020

Я работаю с набором данных журналов вызовов, и мне нужно суммировать, сколько подписчиков было успешно подключено. Каждая строка представляет собой один вызов, и если хотя бы один вызов для подписчика был успешным, мне нужно установить переменную, которая выводит «успешный контакт» в каждой строке, принадлежащей этому подписчику, даже если в этой строке не указан успешный контакт. . Я хотел бы сделать действительно приятную вещь, и идеальный результат для этой проблемы - вывести количество успешных контактов, которые имел подписчик, в наборе данных в каждой строке, принадлежащей подписчику, независимо от успеха или неудачи этой попытки.

По сути, создание такого вывода (success_contact - это созданная переменная) примерно решило бы мою проблему:

ID подписчика | Имя | Связаться с Outcome (позвонить) | Success_Contact

123456 | Боб | Неудачный | Успешно 123456 | Боб | Успешно | Успешно 123456 | Боб | Успешно | Успешно

Но было бы супер, если бы я мог сделать это:

ID подписчика | Имя | Связаться с Outcome (позвонить) | Success_Contact

123456 | Боб | Неудачный | 2 123456 | Боб | Успешно | 2 123456 | Боб | Успешно | 2 985666 | Билл | Неудачный | 0 985666 | Билл | Неудачный | 0

Я пробовал это с PRO C SQL:

proc sql;
create  table contact_success as 
select count('Contact Outcome:'n) as no_success_outreach, 'Subscriber ID'n from work.min 
                    where 'Contact Outcome:'n = 'Successful'
                    group by 'Subscriber ID';

; 

quit;

Но это просто дало мне количество успешных контактов во всем наборе данных в каждой строке.

Как мне достичь идеального результата?

1 Ответ

1 голос
/ 13 июля 2020

Простой способ - подсчитать количество успешных контактов для каждого человека с помощью PRO C FREQ, а затем объединить общее количество обратно по идентификатору.

data have;
   length subscriber_id $20 name $20 contact_outcome $20;
   input subscriber_id $ name $ contact_outcome $ ;
datalines;
123456 Bob Unsuccessful
123456 Bob Successful
123456 Bob Successful
985666 Bill Unsuccessful
985666 Bill Unsuccessful
;

proc freq data=have noprint;
   where contact_outcome = 'Successful';
   tables subscriber_id /missing out=counts;
run;

proc sort data=have;
   by subscriber_id;

data want (drop=count);
   merge have (in=in1)
         counts (in=in2 keep=subscriber_id count)
         ;
   by subscriber_id;
   success_contact = ifn(in2,count,0);
run;
...