Re: [程式] PROC SQL 合併日期取單筆最靠接近

看板Statistics作者 (咖啡王子)時間7年前 (2016/12/23 19:30), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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://www.ptt.cc/bbs/Statistics/M.1482492655.A.3B0.html

12/24 00:40, , 1F
您好 真的非常謝謝!剛嘗試修改終於成功了
12/24 00:40, 1F
文章代碼(AID): #1ONGhlEm (Statistics)
文章代碼(AID): #1ONGhlEm (Statistics)