楼主: foocares
2967 20

[学习分享] 2017年4月21日BASE, 5月16日ADV 100%双通过,感谢本版 [推广有奖]

21
foocares 发表于 2017-5-19 05:19:11 |只看作者 |坛友微信交流群
今天得空,补充讲一下ADV考试时一道最让楼主纠结,来回改了几遍答案的题。
其实题干就是prep guide上讲match merge和SQL join比较几乎一样的例子,只是改了改变量名,所以这里还是用书上X,A,B为准,简单好记。
题目先给出两个表:
表1                   表2
X  A        以及    X  B
1  a                  2  x
4  d                  5  v
2  b                  3  y
问下列哪个代码能输出这样的结果:
X  A  B
1  a
2  b  x
3      y
4  d
5      v

很显然,这是一个在data step里可以用merge来实现的输出,本来考点应该是这种merge等同于SQL里加了coalesce选项的full join.
但是,这里有一点很让人纠结,与prep guide上不同的地方在于考题里的原表不是严格排序!

可以看到X是按1,4,2 或者2,5,3来给的,而我们知道,如果不用order by X, 那么SQL按理是不会按照最后结果X从1到5这么输出,
按楼主的理解,答案中给的
title ’Table Merged’;
select coalesce(One.x, Two.x)
as X, a, b
from One
full join
Two
on One.x = Two.x;
应该是1, 4, 2, 5, 3这么来填:

X  A  B
1  a
4  d
2  b  x
5      v
3      y

但再看其他几个备选答案,一个是select One.x配合left join不予考虑,一个是set a; set b;的写法搞成了one to one reading,还剩下一个干扰选项是:
data merged;
      set One Two;
      BY X;
run;
Proc print data = merger noobs;
run;
楼主想了很久,觉得有这个BY X能满足排序后的输出结果,但是,因为原来的表并没有对X排序,这么直接用BY到底行不行?
斗争了很久,我还是没选这个而选了有full join带coalesce那个。

最后结果虽然表明我蒙对了,但这题一直是存疑的。

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 04:02