Re: [程式] SAS有關交易資料比對
謝謝你的幫忙
不過一開始我舉的例子有點太簡化
不過你的概念依然可以套用在這裡面
我應該再加幾個欄位如下
分別是金額跟持有時間
有興趣的大大可以再試試
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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):