大家好!
只是想知道如何计算客户花费的时间。 如您所见,该客户端没有任何策略存在一些差距。我想把那些间隔时间排除在外。 我正在使用
proc sql;
create table client_lost as
select distinct party_id,
max(end_date) as max_end_date format date9.,
min(START_DATE) as min_start_date format date9.
group by 1
;quit;
data client_lost_2;
set client_lost;
tenure = yrdif(min_start_date,max_end_date,'Actual');
run;
提前谢谢!
答案 0 :(得分:0)
由于要查看遵循线性类型顺序的数据并且顺序很重要,因此使用数据步骤是一种更好的方法。
首先对数据进行排序,然后使用DoW循环遍历并找出每个差距和连续的覆盖期。完成后,您可以计算差异并求和。如果您的数据很小,另一种选择是创建一个“每日”文件,该文件为每个日期创建一条记录,您可以删除重复项,然后根据需要重新汇总以获取连续的间隔和间隔。但是,它需要更多的代码和更长的时间。
将下面的变量名称替换为您的变量名称,可以正确使用句点了。
ID = client_id 产品编号= Policy_ID 有效日期=起始日期 ExpiryDate =结束日期
proc sort data=prod;
by ID ProductNumber EffectiveDate descending ExpiryDate;
run;
data align_periods;
do until(last.productNumber);
set prod; by id productNumber;
format effD expD yymmdd10.;
if expD < effectiveDate then
if not missing(expD) then do;
output;
call missing(effD, expD);
end;
effD = min(effD, effectiveDate);
expD = max(expD, expiryDate);
duration = expD - effD;
end;
output;
drop effectiveDate expiryDate;
rename effD=effectiveDate expD=expiryDate;
run;
proc means data=align_periods noprint;
class ID;
var duration;
output out=want sum(duration) = tenure;
run;