作者tew (咖啡王子)
看板Statistics
標題Re: [程式] PROC SQL 合併日期取單筆最靠接近
時間Fri Dec 23 19:30:51 2016
※ 引述《blackhores (八億)》之銘言:
: [軟體程式類別]:
: SAS
: [程式問題]:
: 資料處理 之 PROC SQL合併
: [軟體熟悉度]:
: 新手
: [問題敘述] + [程式範例]:
: 範例如下
: AAA的檔案欄位
: NAME DATE
: e.g. 台積電 20090901
: 台積電 20100901
: 台積電 20110901
: BBB的檔案
: NAMES EFFECT DATE NO
: e.g. 台積電 20090101 代號0001
: 台積電 20100501 代號2001
就你的說法 我會這麼做
其實 就是創造一個結束日來輔助就好
proc sort data=bbb;by names descending effect_date;
run;
data bbb;
set bbb;by names;
end_date=lag(effect_date)-1;
if first.names then end_date=mdy(12,31,9999);
run;
proc sql;
create table new as select
a.name,a.date,b.no
from aaa as a,bbb as b
where a.name=b.names and
b.effect_date<= a.date<=b.end_date;
quit;
from aaa as a,bbb as b
: 希望合併後結果
: e.g. NAME DATE NO
: 台積電 20090901 代號0001
: 台積電 20100901 代號2001
: 台積電 20110901 代號2001
: 合併目的是將資料AAA加入代號(在資料BBB裡),
: 合併條件是 DATE 必須大於 有效起始日EFFECT DATE,同時取最大的,
: 像上面資料AAA的第二筆的DATE 20100901 同時大於 資料BBB的兩個EFFECT DATE,
: 合並後想要只留下EFFECT為20100501(代號2001)的那一筆。
: 簡單來說就是大於等於後不只一筆,取日期最大的,
: 以下為想到的SAS寫法,但是只有合併沒有加入取最大的條件
: 想請教大家可以怎麼做修改,感謝!
: PROC SQL;
: create table CCC as
: select * from AAA as a
: left join BBB as b
: on AAA.NAME = b.NAMES
: where (a.DATE >= b.EFFECT DATE);
: order by DATE NAME;
: quit;
--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.97.186.235
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Statistics/M.1482492655.A.3B0.html
1F:推 blackhores: 您好 真的非常謝謝!剛嘗試修改終於成功了 12/24 00:40