全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3863 3
2016-05-23
请教大神们~我想了很久也没有特别好的实施方法,现在需要批量处理数据
不同时间段有不同的金额,想知道客户在此时间段内,业务最大叠加的金额是多少。最大金额可能出现在时间轴的任何一点,不要求知道时间,只要求得出金额。
表格形式如下
客户号  开始日期          结束日期       金额
123      2011-03-01    2012-06-04     80000
123      2012-01-02    2013-03-03     100000
123      2014-05-05    2015-05-05     200000
123      2013-01-01    2015-03-20     80000
456      2012-01-01    2016-01-01     700000
456      2012-06-08    2016-01-01     80000
456      2013-01-01    2016-01-01     10000
456      2015-06-01    2016-01-01     20000
如客户123最大金额为28万,出现在14-05-05到15-03-20之间
客户456最大金额为711万,出现在2015年06-01到2016-01-01之间
客户最多有50多笔业务~
多谢~


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-5-24 15:52:07
我理解意思是, 以客户为分租,求连续时间段内 客户消费最大额。
主要使用sas中retain函数,下次你碰到这种问题,第一时间往这个方向想就ok了。
1.时间连续:累加
2.时间断裂:重置---继续累加
3.求最大值

参见代码,可以拿去试一下


复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-5-25 22:42:33
zqy458219593 发表于 2016-5-24 15:52
我理解意思是, 以客户为分租,求连续时间段内 客户消费最大额。
主要使用sas中retain函数,下次你碰到这种 ...
蟹蟹

时间段可能是断层的,可能有一年或者有几个月客人没有任何金额的交易。
要得出所有客人近5年内业务的最大累积金额。

我后来自己也想了一个方法,不过比较笨
proc sql;
create table a1 as
select cus_id, start_date as date
from a.original;
quit;

proc sql;
create table a2 as
select cus_id, end_date as date
from a.original;
quit;

proc sort data=a1;
by cus_id date;
run;

proc sort data=a2;
by cus_id date;
run;

data merge;
merge a1 a2
by cus_id;
run;

proc sql;
create table a3 as
select *
from merge cross join a.original as a
by merge.id=a.id;
quit;

data a4;
set a3;
if date ge start_date
and date lt end_date
then flag=1;
run;

proc sql;
create table a5 as
select *,
        sum(amount) as amount_sum
from a4
group by cus_id loan_date flag;
quit;

data a6;
set a5;
if flag=""
then amount_sum=loan_amount;
run;

proc sql;
select cus_id, max(amount_sum) as max
from a6;
quit;


不过你的代码更简洁高效~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-5-26 09:39:41
ashleyle 发表于 2016-5-25 22:42
蟹蟹

时间段可能是断层的,可能有一年或者有几个月客人没有任何金额的交易。
你的方法也是可以的。只不过逻辑比较直接,而且你使用了多步语句,其中的左联语句在数据量庞大(PB级)的情况下,速度将会非常的慢。而且你这份是消费数据,频次应该是很高的。建议去sas help看看retain函数和LAG函数。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群