作者MOONY135 (谈无慾)
看板Statistics
标题Re: [程式] 一题资料库程式 很简单的
时间Fri Jun 19 12:21:47 2015
※ 引述《cawaiilulu (across)》之铭言:
: 我有两个table
: A是 n*6 B是 m*6
: 那6个 column 分别是 ID v1-v5
: 要作下列工作
: A每次出一row 跟B m个row v1-v5 一一比较
: 然後要把A比B大的个数算出来 最後找出m次比较最大值 output到 一个新table C
: 所以 C有 n*2 (id num_大)
: id1 0
: id2 4
: 这样
: 我写了一个 就是每次 A出第一row 跟B每row比 等於一次create m*7 那麽大的table
: 然後找出 最大值 接着删掉 已经比完的id 再回到A出第一行row 这样循环
: 跑n=10万 row m=50万 row 一小时都还跑不完
: 感觉应该有更快的写法
: 请大家赐教 怎麽构思更快的写法 我是用SAS(有的话就太完美)
: 但其他语言也没关系 主要是想构思
资料长相
AID AV1 AV2 AV3 AV4 AV5
A1 1 4 3 1 2
BID BV1 BV2 BV3 BV4 BV5
B1 2 1 4 4 1
B2 4 1 5 4 3
PROC SQL;
CREATE TABLE WORK.STEP1 AS
SELECT t1.AID,
t2.BID,
case
when t2.BV1-t1.AV1 >=0 then 0
else 1
end as CV1,
case
when t2.BV2-t1.AV2 >=0 then 0
else 1
end as CV2,
case
when t2.BV3-t1.AV3 >= 0 then 0
else 1
end as CV3,
case
when t2.BV4-t1.AV4 >= 0 then 0
else 1
end as CV4,
case
when t2.BV5-t1.AV5 >= 0 then 0
else 1
end as CV5
FROM SASUSER.A t1
CROSS JOIN
SASUSER.B t2;
QUit;
data step2(KEEP=AID BID num_大);
set step1;
num_大=CV1+CV2+CV3+CV4+CV5;
run;
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.238.136.193
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Statistics/M.1434687710.A.583.html
※ 编辑: MOONY135 (36.238.136.193), 06/19/2015 12:29:46