我是SAS的初学者用户,特别是在汇总行计算方面。
以下是我相信你们之前可能遇到过的一个问题。
我所拥有的数据与保险单相关,这里是一个示例数据集:从左到右的列是客户编号,策略编号,策略状态,策略开始日期和策略取消日期(如果策略未激活,否则是一个缺失值)。
data have;
informat cust_id 8. pol_num $10. status $10. start_date can_date DDMMYY10.;
input cust_id pol_num status start_date can_date;
format start_date can_date date9.;
datalines;
110 P110001 Cancelled 04/12/2004 10/10/2013
110 P110002 Active 01/03/2005 .
123 P123001 Cancelled 21/07/1998 23/04/2013
123 P123003 Cancelled 22/10/1987 01/11/2011
133 P133001 Active 19/02/2001 .
133 P133001 Active 20/02/2002 .
;
run;
基本上我想将这些策略级别信息推送到客户级别,如果客户持有至少一个活动策略,那么他的状态将是“活动”,否则如果他的所有策略都被取消,那么他的状态变为“无效”状态。我还需要一个客户"开始约会"它取决于该客户下最早的政策开始日期。如果客户是“非活动”,那么我需要客户的最新政策取消日期作为客户的退出日期。
以下是我需要的内容:
data want;
informat cust_id 8. status $10. start_date exit_date DDMMYY10.;
input cust_id status start_date exit_date;
format start_date exit_date date9.;
datalines;
110 Active 01/03/2005 .
123 Inactive 22/10/1987 23/04/2013
133 Active 19/02/2001 .
;
run;
任何形式的解决方案将非常感谢! DATA
步骤或PROC SQL
都可以。
非常感谢你。
答案 0 :(得分:1)
你可以这样做:
<td>
答案 1 :(得分:0)
您可以在DATA步骤中攻击该问题。这是一种简单的方法,假设您的数据按 cust_id 和 start_date 排序......
data want;
set have (keep=cust_id status start_date exit_date);
where upcase(status) contains 'ACTIVE';
by cust_id start_date;
if first.start_date then output;
else delete;
run;
/*BEGINNER NOTES*/
*1] WHERE tells SAS to compile only records that fit a certain
condition - the DS 'want' will never have any observations with
'CANCELLED' in the status variable;
*2] I use UPCASE() to standardize the contents of status, as CONTAINS
is a case-sensitive operator;
*3] FIRST.variable = 1 if the value is the first encountered in
the compile phase;