Re: [程式] 一題資料庫程式 很簡單的
※ 引述《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://www.ptt.cc/bbs/Statistics/M.1434687710.A.583.html
※ 編輯: MOONY135 (36.238.136.193), 06/19/2015 12:29:46
討論串 (同標題文章)