j******n 发帖数: 2206 | 1 我要用a left join b,under some conditions.
但是我也想知道b中哪些 Records没有被select上。有什么办法把这些没选上的records
output到一个dataset里么?
谢谢 |
g*********r 发帖数: 2847 | 2 not familiar with SAS. but you can do b left join a so that you get those
not selected when doing a left join b (fields from a will be null) |
j******n 发帖数: 2206 | 3 a very very very good trick. I will try this.thank you.
at the same time, i still hope someone can give me an answer in SAS. I mean
still using a left join b, but get two different datasets.(one is the merged
data, another one are the records from b not selected.)
【在 g*********r 的大作中提到】 : not familiar with SAS. but you can do b left join a so that you get those : not selected when doing a left join b (fields from a will be null)
|
a*****3 发帖数: 601 | 4 说穿了不就是'在b 不在a' 么?
就按givemeoffer那么做就行.
或者先用 a left b, 得到b里面被拣选的,
ie, 然后用用minus搞, 得到找不到对象的,
不过也没看出好在哪里.
records
【在 j******n 的大作中提到】 : 我要用a left join b,under some conditions. : 但是我也想知道b中哪些 Records没有被select上。有什么办法把这些没选上的records : output到一个dataset里么? : 谢谢
|
j******n 发帖数: 2206 | 5 恩,不过我这些条件有些复杂,不知道能不能这么搞
on a.id=b.id and a.provider=b.provider and a.begdate<=b.admsn_dt and a.
enddate>=b.dschrgdt;
【在 a*****3 的大作中提到】 : 说穿了不就是'在b 不在a' 么? : 就按givemeoffer那么做就行. : 或者先用 a left b, 得到b里面被拣选的, : ie, 然后用用minus搞, 得到找不到对象的, : 不过也没看出好在哪里. : : records
|
a*****3 发帖数: 601 | 6 这不挺好嘛, 再不放心就设计个testing dataset 向老板证明一下.
【在 j******n 的大作中提到】 : 恩,不过我这些条件有些复杂,不知道能不能这么搞 : on a.id=b.id and a.provider=b.provider and a.begdate<=b.admsn_dt and a. : enddate>=b.dschrgdt;
|
g****8 发帖数: 2828 | 7 how about just using data step with IN?
But not sure about what kind of conditions you need to meet.
records
【在 j******n 的大作中提到】 : 我要用a left join b,under some conditions. : 但是我也想知道b中哪些 Records没有被select上。有什么办法把这些没选上的records : output到一个dataset里么? : 谢谢
|
a*****3 发帖数: 601 | 8 你没好好看题,人家非要用 a left b, 选出在b不在a的,
所以我才建议使用第二步 minus, 在第一步之后.
【在 g****8 的大作中提到】 : how about just using data step with IN? : But not sure about what kind of conditions you need to meet. : : records
|
g*********r 发帖数: 2847 | 9
yes you can.
seems you are working in health care fields
【在 j******n 的大作中提到】 : 恩,不过我这些条件有些复杂,不知道能不能这么搞 : on a.id=b.id and a.provider=b.provider and a.begdate<=b.admsn_dt and a. : enddate>=b.dschrgdt;
|
j******n 发帖数: 2206 | 10 yes, i do work in health care field.
claims data....
【在 g*********r 的大作中提到】 : : yes you can. : seems you are working in health care fields
|
|
|
j******n 发帖数: 2206 | 11 汗,不一定非要用a left join b啊。。。merge也可以,只是好久没用过merge了。明
天试试
【在 a*****3 的大作中提到】 : 你没好好看题,人家非要用 a left b, 选出在b不在a的, : 所以我才建议使用第二步 minus, 在第一步之后.
|
a*****3 发帖数: 601 | 12 忘了考虑性别了,
女的说‘不要’的时候,其实说的是‘要’,
女的说‘我要’的时候, 其实说的是‘我非要’ .
【在 j******n 的大作中提到】 : 汗,不一定非要用a left join b啊。。。merge也可以,只是好久没用过merge了。明 : 天试试
|
j******n 发帖数: 2206 | 13 厉害
【在 a*****3 的大作中提到】 : 忘了考虑性别了, : 女的说‘不要’的时候,其实说的是‘要’, : 女的说‘我要’的时候, 其实说的是‘我非要’ .
|
g****8 发帖数: 2828 | 14 好吧,我理解错误了
【在 a*****3 的大作中提到】 : 你没好好看题,人家非要用 a left b, 选出在b不在a的, : 所以我才建议使用第二步 minus, 在第一步之后.
|
g****8 发帖数: 2828 | 15 不知道下面这个行不行,没有test过。而且如果你的b里面variable多的话,keep那里
要写很多的话,就没有sql的方法efficient了。
如果a里面variable少,改成drop也行。
proc sort data=a; by id provider;run;
proc sort data=b; by id provider;run;
DATA test;
Merge a (in=t1) b(in=t2);
by id provider;
if (t1=1 and t2=0 ) then delete;
if( t1=1 and t2=1 and begdate<=admsn_dt and enddate>=dschrgdt ) then
delete;
keep ;
run;
proc sort data=test nodupkey;by ***; run; |
g****8 发帖数: 2828 | 16 忘记了,楼主还要merge后的data,应该把那个delete改成一个tag。
明天帮你想呀 |
a*****9 发帖数: 1315 | 17 可以用
proc sql ;
select *
from a left join b
on ( conditions 之类 eg,a.id=b.id )
;
quit;
另外还有一种 可以考虑试试:
proc sql ;
select *
from a
except all
select *
from b
;
quit;
just 2 cents , 莫见笑 ,LZ试试, 不知道你的具体的数据, 见谅呀, |