SAS中文论坛

标题: 跟crackman做sas adv认证试题(8) [打印本页]

作者: shiyiming    时间: 2010-11-17 14:03
标题: 跟crackman做sas adv认证试题(8)
From crackman's blog on Baidu


               
                <p><font size="4" face="宋体">Given the SAS data sets:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
<br>
WORK.ONE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  WORK.TWO <br>
<br>
Id&nbsp;&nbsp;&nbsp;  Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Salary&nbsp;&nbsp;&nbsp;&nbsp;  <br>
---&nbsp;&nbsp;  ------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ---&nbsp;&nbsp;&nbsp;&nbsp;  ------&nbsp;&nbsp;&nbsp;&nbsp;  <br>
112&nbsp;&nbsp;  Smith&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  243&nbsp;&nbsp;&nbsp;&nbsp;  150000&nbsp;&nbsp;&nbsp;&nbsp;  <br>
243&nbsp;&nbsp;  Wei&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  355&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  45000&nbsp;&nbsp;&nbsp;&nbsp;  <br>
457&nbsp;&nbsp;  Jones&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  523&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  75000&nbsp;&nbsp;&nbsp;&nbsp;  <br>
<br>
The following SAS program is submitted:<br>
<br>
data WORK.COMBINE;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;  merge WORK.ONE WORK.TWO;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;  by Id;&nbsp;&nbsp;  <br>
run; <br>
<br>
Which SQL procedure statement produces <br>
the same results?&nbsp;&nbsp;&nbsp;&nbsp;  </font></p>
<p><br>
<font size="4" face="宋体">A.<br>
create table WORK.COMBINE as&nbsp;&nbsp;&nbsp;  <br>
select <br>
&nbsp;&nbsp;  Id, <br>
&nbsp;&nbsp;  Name,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  Salary&nbsp;&nbsp;&nbsp;&nbsp;  <br>
from&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  WORK.ONE&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  full join <br>
&nbsp;&nbsp;  WORK.TWO&nbsp;&nbsp;  <br>
on ONE.Id=TWO.Id<br>
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;  B.<br>
create table WORK.COMBINE as&nbsp;&nbsp;&nbsp;  <br>
select <br>
&nbsp;&nbsp;  coalesce(ONE.Id, TWO.Id) as Id,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  Name,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  Salary&nbsp;&nbsp;&nbsp;&nbsp;  <br>
from&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  WORK.ONE, <br>
&nbsp;&nbsp;  WORK.TWO&nbsp;&nbsp;  <br>
where ONE.Id=TWO.Id&nbsp;&nbsp;&nbsp;&nbsp;  <br>
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;  C.<br>
create table WORK.COMBINE as&nbsp;&nbsp;&nbsp;  <br>
select <br>
&nbsp;&nbsp;  coalesce(ONE.Id, TWO.Id) as Id,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  Name,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  Salary&nbsp;&nbsp;&nbsp;&nbsp;  <br>
from&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  WORK.ONE&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  full join <br>
&nbsp;&nbsp;  WORK.TWO&nbsp;&nbsp;  <br>
on ONE.Id=TWO.Id<br>
order by Id&nbsp;&nbsp;  <br>
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;  D.<br>
create table WORK.COMBINE as&nbsp;&nbsp;&nbsp;  <br>
select <br>
&nbsp;&nbsp;  coalesce(ONE.Id, TWO.Id) as Id,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  Name,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  Salary&nbsp;&nbsp;&nbsp;&nbsp;  <br>
from&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  WORK.ONE, <br>
&nbsp;&nbsp;  WORK.TWO&nbsp;&nbsp;  <br>
where ONE.Id=TWO.Id&nbsp;&nbsp;&nbsp;&nbsp;  <br>
order by ONE.Id <br>
; </font></p>
<p><font size="4" face="宋体">答案是:C</font></p>
<p><font size="4" face="宋体">本文属于博客:</font><a href="http://hi.baidu.com/crack_man/home"><font size="4" face="宋体"><!-- m --><a class="postlink" href="http://hi.baidu.com/crack_man/home">http://hi.baidu.com/crack_man/home</a><!-- m --></font></a><font size="4" face="宋体"> 版权归作者所有,欢迎转载!如有转载,请务必注明出处!未经本文作者同意不得用于商业应用。</font></p>
<p><font size="4" face="宋体">本道题考察的MERGE SQL在横向水平上合并数据集上的区别。<br>
可以参见两篇文章:<br>
</font><a href="http://hi.baidu.com/crack_man/blog/item/16acc5bbfa88ce1a18d81f76.html"><font size="4" face="宋体"><!-- m --><a class="postlink" href="http://hi.baidu.com/crack_man/blog/item/16acc5bbfa88ce1a18d81f76.html">http://hi.baidu.com/crack_man/blog/item ... 81f76.html</a><!-- m --></font></a><br>
<a href="http://hi.baidu.com/crack_man/blog/item/c4cf52b1ef327ec137d3ca84.html"><font size="4" face="宋体"><!-- m --><a class="postlink" href="http://hi.baidu.com/crack_man/blog/item/c4cf52b1ef327ec137d3ca84.html">http://hi.baidu.com/crack_man/blog/item ... 3ca84.html</a><!-- m --></font></a><br>
<font size="4" face="宋体">下面对四个答案进行解析。<br>
A:<br>
犯了一个明显的错误,就是ID这个变量引用不明确。<br>
B:<br>
返回只有一个观测,因为ONE和TWO的连接按照ON筛选条件进行了筛选,结果只有一条符合条件。<br>
C:<br>
首先执行的是按照ON条件执行FULL JOIN链接,此时如果不用COALESCE,数据集会有两个ID,一个是ONE 一个是TWO的,如果ONE和TWO的ID不匹配,那么想要的ID就为缺失值。<br>
那么COALESCE函数就是合并这两个ID,然后重复的合并在一起,剔除缺失值,所以结果就和MERGE一致。<br>
D:<br>
错误和B一样,连接方式不是FULL JOIN,而是inner join。</font></p>
<p><font size="4" face="宋体">示例程序:</font></p>
<p><font size="4" face="宋体">data one;<br>
input id name $@;<br>
datalines;<br>
112 smith<br>
243 wei<br>
457 jones<br>
;<br>
data two;<br>
input id salary@;<br>
datalines;<br>
243 150000<br>
355 45000<br>
523 75000<br>
;<br>
run;<br>
data WORK.COMBINE;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;  merge WORK.ONE WORK.TWO;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;  by Id;&nbsp;&nbsp;  <br>
  run; <br>
  proc sql;<br>
create table WORK.COMBINE1 as&nbsp;&nbsp;&nbsp;  <br>
select <br>
&nbsp;&nbsp;  Id, <br>
&nbsp;&nbsp;  Name,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  Salary&nbsp;&nbsp;&nbsp;&nbsp;  <br>
from&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  WORK.ONE&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  full join  <br>
&nbsp;&nbsp;  WORK.TWO&nbsp;&nbsp;  <br>
on ONE.Id=TWO.Id<br>
; <br>
create table WORK.COMBINE2 as&nbsp;&nbsp;&nbsp;  <br>
select <br>
&nbsp;&nbsp;  coalesce(ONE.Id, TWO.Id) as Id,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  Name,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  Salary&nbsp;&nbsp;&nbsp;&nbsp;  <br>
from&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  WORK.ONE,  <br>
&nbsp;&nbsp;  WORK.TWO&nbsp;&nbsp;  <br>
where ONE.Id=TWO.Id&nbsp;&nbsp;&nbsp;&nbsp;  <br>
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
create table WORK.COMBINE3 as&nbsp;&nbsp;&nbsp;  <br>
select <br>
&nbsp;&nbsp;  coalesce(ONE.Id, TWO.Id) as Id,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  Name,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  Salary&nbsp;&nbsp;&nbsp;&nbsp;  <br>
from&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  WORK.ONE&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  full join  <br>
&nbsp;&nbsp;  WORK.TWO&nbsp;&nbsp;  <br>
on ONE.Id=TWO.Id<br>
order by Id&nbsp;&nbsp;  <br>
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
create table WORK.COMBINE4  as&nbsp;&nbsp;&nbsp;  <br>
select <br>
&nbsp;&nbsp;  coalesce(ONE.Id, TWO.Id) as Id,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  Name,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  Salary&nbsp;&nbsp;&nbsp;&nbsp;  <br>
from&nbsp;&nbsp;  <br>
&nbsp;&nbsp;  WORK.ONE,  <br>
&nbsp;&nbsp;  WORK.TWO&nbsp;&nbsp;  <br>
where ONE.Id=TWO.Id&nbsp;&nbsp;&nbsp;&nbsp;  <br>
order by ONE.Id <br>
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font></p>
<p><font size="4" face="宋体">quit; <br>
</font></p> <a href="http://hi.baidu.com/crack%5Fman/blog/item/5ca446c6e28c0c25e4dd3b93.html">阅读全文</a>
               
                <br/><b>类别:</b><a href="http://hi.baidu.com/crack%5Fman/blog/category/%B8%FAcrackman%D7%F6sas%20adv%C8%CF%D6%A4%CA%D4%CC%E2">跟crackman做sas adv认证试题</a>&nbsp;<a href="http://hi.baidu.com/crack%5Fman/blog/item/5ca446c6e28c0c25e4dd3b93.html#comment">查看评论</a>




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2