按 ID 在多行上对 SAS 中的成功进行分组,其中至少 1 次成功才算成功

Grouping successes in SAS on multiple rows by ID where at least 1 success counts as a success

我正在处理通话记录数据集,我需要总结已成功联系了多少订阅者。每一行都是一个呼叫,如果至少一个订阅者呼叫成功,我需要设置一个变量,在属于该订阅者的每一行上输出“成功联系”,即使该行没有列出成功的联系.我想做的一件非常好的事情,而且这个问题的理想结果是在属于订阅者的每一行的数据集中输出订阅者成功联系的次数,而不管该尝试的成功或失败。

基本上,创建这种输出可以大致解决我的问题(success_contact 将是创建的变量):

Subscriber ID | Name | Contact Outcome (call) | Success_Contact

123456 | Bob | Unsuccessful | Successful
123456 | Bob | Successful | Successful
123456 | Bob | Successful | Successful

但如果我能做到这一点那就太棒了:

Subscriber ID | Name | Contact Outcome (call) | Success_Contact

123456 | Bob | Unsuccessful | 2
123456 | Bob | Successful | 2
123456 | Bob | Successful | 2
985666 | Bill | Unsuccessful | 0
985666 | Bill | Unsuccessful | 0

我用 PROC 试过这个 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;

但这只是给了我整个数据集中每一行的成功联系人的数量。

我怎样才能达到理想的结果?

一个简单的方法是使用PROC FREQ统计每个人成功联系的次数,然后将总数按ID合并回去。

data have;
   length subscriber_id  name  contact_outcome ;
   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;