作者tew (咖啡王子)
站内Statistics
标题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
1F:推 maumausam:看不懂,我要来好好研究一下,很感谢原PO与tew大的解答 10/24 20:03
2F:推 lsshno1:学到了%eval的使用方法, 受教了 10/25 15:38