作者lunger (像风一样流浪的小孩)
看板Statistics
标题Re: [程式] SAS有关交易资料比对
时间Sun Oct 24 23:58:51 2010
谢谢你的帮忙
不过一开始我举的例子有点太简化
不过你的概念依然可以套用在这里面
我应该再加几个栏位如下
分别是金额跟持有时间
有兴趣的大大可以再试试
C1 C2 amt txn_start txn_end order
A B 200 5/1 5/15 1
D E 300 5/3 5/10 2
B C 100 5/10 5/30 3
E F 301 5/11 6/6 4
B C 100 5/15 6/1 5
B C 203 5/15 6/1 6
B C 202 5/16 6/1 7
D E 298 5/12 5/30 8
C D 301 6/2 6/17 9
我多放了几个栏位跟多放了order=3跟order=5,6,7
可以发现order=3不能跟order=1串,因为不在时间内,这点到好处理,再下时间判断即可
但是order=5也不能跟oder=1串,应该是跟order=6串,因为时间在之後,且金额较相似
金额相似的条件,也许可以用+-5%以内就算相似
但你可发现,後面还有个order7,金额更相似
但为何不是order 7,因为即是金额相似,但时间在之後,但一次只认同串一笔
串完order=6之後,order=7当然就不能算进去了
可是用大大的逻辑会把order7也算进去,因为变成一对多的join
所以这里也得用些方式另外处理
真是不好意思我漏写了一堆情境跟假设
但这已经给我一些概念来运作了
非常感谢
只是这样的作法很吃server资源
因为transaction的资料可能会非常多
所以如果有想到更省资源的运算方式
希望各位大大不吝指教
再次感谢帮忙
※ 引述《tew (咖啡王子)》之铭言:
: 标题: Re: [程式] SAS有关交易资料比对
: 时间: Sat Oct 23 12:55:17 2010
:
: 题目很有趣
: 虽然你给的资料不完全
: 以客户来说 应该会有两三个客户以上
: 这样我撰写 可以一步到位
: 不过 提供我的做法 我假设你的客户最多交易100次
: 写了以下的巨集
: 你可以更改多次一点
: 本巨集结果最好是看到log档出现红红绿绿的警告字样时
: 代表已经处理完成 (就是交易次数100次以内就够了 )
:
: 以下我增列几笔资料 以验证我的想法 我想应该符合你的逻辑想法
: data a1;
: input c1 $ c2 $;
: datalines;
: A B
: D E
: E F
: B C
: D E
: C D
: ;
: run;
: data a1;
: set a1;
: order=_n_;
: /*假设你的交易是有顺序性的
: 所以 D--->E 是单独1笔
: 不会产生 B--C---D---E这样的路径
: */
: run;
: %macro a;
: proc datasets ;
: delete final;
: quit;
: %do i=2 %to 100;
: %let x=%eval(&i-1);
: %let y=%eval(&i+1);
: proc sql;
: create table a&i as select *, two.order as order2,two.c&i as c&y
: from a&x one, a&x two
: where one.c2=two.c1 and
: one.order<two.order;
: create table b as select *
: from a&x
: where order not in(select order from a&i) ;
: create table c as select c1,c&i as c2,&x as transaction ,order
: from b
: where order not in(select order2 from a&i)
: order by order;
: quit;
: proc append base=final data=c;
: quit;
: %end;
: proc sort data=final out=final(drop=order);by order;
: run;
: %mend;
: %a;
:
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 61.216.240.212
: 推 maumausam:看不懂,我要来好好研究一下,很感谢原PO与tew大的解答 10/24 20:03
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 124.12.27.185