作者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/cn.aspx?n=bbs/Statistics/M.1482492655.A.3B0.html
1F:推 blackhores: 您好 真的非常谢谢!刚尝试修改终於成功了 12/24 00:40