SAS中文论坛

标题: 跟crakman做sas base认证试题(2) [打印本页]

作者: shiyiming    时间: 2010-11-10 22:02
标题: 跟crakman做sas base认证试题(2)
From crackman's blog on Baidu


               
                <p><font size="4">2.Given the following raw data records in TEXTFILE.TXT:<br>
<br>
  ----|----10---|----20---|----30<br>
  John,FEB,13,25,14,27,Final<br>
  John,MAR,26,17,29,11,23,Current<br>
  Tina,FEB,15,18,12,13,Final<br>
  Tina,MAR,29,14,19,27,20,Current<br>
<br>
The following output is desired: <br>
<br>
  Obs  Name  Month  Status&nbsp;&nbsp;&nbsp;  Week1&nbsp;&nbsp;  Week2&nbsp;&nbsp;  Week3&nbsp;&nbsp;  Week4&nbsp;&nbsp;  Week5 <br>
<br>
&nbsp;&nbsp;  1&nbsp;&nbsp;  John&nbsp;&nbsp;  FEB&nbsp;&nbsp;  Final&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  $13&nbsp;&nbsp;&nbsp;&nbsp;  $25&nbsp;&nbsp;&nbsp;&nbsp;  $14&nbsp;&nbsp;&nbsp;&nbsp;  $27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  . <br>
&nbsp;&nbsp;  2&nbsp;&nbsp;  John&nbsp;&nbsp;  MAR&nbsp;&nbsp;  Current&nbsp;&nbsp;&nbsp;&nbsp;  $26&nbsp;&nbsp;&nbsp;&nbsp;  $17&nbsp;&nbsp;&nbsp;&nbsp;  $29&nbsp;&nbsp;&nbsp;&nbsp;  $11&nbsp;&nbsp;&nbsp;&nbsp;  $23 <br>
&nbsp;&nbsp;  3&nbsp;&nbsp;  Tina&nbsp;&nbsp;  FEB&nbsp;&nbsp;  Final&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  $15&nbsp;&nbsp;&nbsp;&nbsp;  $18&nbsp;&nbsp;&nbsp;&nbsp;  $12&nbsp;&nbsp;&nbsp;&nbsp;  $13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  . <br>
&nbsp;&nbsp;  4&nbsp;&nbsp;  Tina&nbsp;&nbsp;  MAR&nbsp;&nbsp;  Current&nbsp;&nbsp;&nbsp;&nbsp;  $29&nbsp;&nbsp;&nbsp;&nbsp;  $14&nbsp;&nbsp;&nbsp;&nbsp;  $19&nbsp;&nbsp;&nbsp;&nbsp;  $27&nbsp;&nbsp;&nbsp;&nbsp;  $20 <br>
<br>
Which SAS program correctly produces the desired output?</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  A.<br>
data WORK.NUMBERS; <br>
&nbsp;&nbsp;  length Name $ 4 Month $ 3 Status $ 7; <br>
&nbsp;&nbsp;  infile 'TEXTFILE.TXT' dsd;<br>
&nbsp;&nbsp;  input Name $ Month $;<br>
&nbsp;&nbsp;  if Month='FEB' then input Week1 Week2 Week3 Week4 Status $;<br>
&nbsp;&nbsp;  else if Month='MAR' then input Week1 Week2 Week3 Week4 Week5 Status $;<br>
&nbsp;&nbsp;  format Week1-Week5 dollar6.;<br>
run; <br>
proc print data=WORK.NUMBERS;<br>
run; <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;  B.<br>
data WORK.NUMBERS; <br>
&nbsp;&nbsp;  length Name $ 4 Month $ 3 Status $ 7; <br>
&nbsp;&nbsp;  infile 'TEXTFILE.TXT' dlm=',' missover; <br>
&nbsp;&nbsp;  input Name $ Month $;<br>
&nbsp;&nbsp;  if Month='FEB' then input Week1 Week2 Week3 Week4 Status $;<br>
&nbsp;&nbsp;  else if Month='MAR' then input Week1 Week2 Week3 Week4 Week5 Status $;<br>
&nbsp;&nbsp;  format Week1-Week5 dollar6.;<br>
run; <br>
proc print data=WORK.NUMBERS;<br>
run; <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;  C.<br>
data WORK.NUMBERS; <br>
&nbsp;&nbsp;  length Name $ 4 Month $ 3 Status $ 7; <br>
&nbsp;&nbsp;  infile 'TEXTFILE.TXT' dlm=',';<br>
&nbsp;&nbsp;  input Name $ Month $ @; <br>
&nbsp;&nbsp;  if Month='FEB' then input Week1 Week2 Week3 Week4 Status $;<br>
&nbsp;&nbsp;  else if Month='MAR' then input Week1 Week2 Week3 Week4 Week5 Status $;<br>
&nbsp;&nbsp;  format Week1-Week5 dollar6.;<br>
run; <br>
proc print data=WORK.NUMBERS;<br>
run; <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;  D.<br>
data WORK.NUMBERS; <br>
&nbsp;&nbsp;  length Name $ 4 Month $ 3 Status $ 7; <br>
&nbsp;&nbsp;  infile 'TEXTFILE.TXT' dsd @;<br>
&nbsp;&nbsp;  input Name $ Month $;<br>
&nbsp;&nbsp;  if Month='FEB' then input Week1 Week2 Week3 Week4 Status $;<br>
&nbsp;&nbsp;  else if Month='MAR' then input Week1 Week2 Week3 Week4 Week5 Status $;<br>
&nbsp;&nbsp;  format Week1-Week5 dollar6.;<br>
run; <br>
proc print data=WORK.NUMBERS;<br>
run; <br>
<br>
Answer: C</font></p>
<p><font size="4">这道题其实考察的是读入外部文本数据时几个知识点,1.INFILE语句读入外部数据时候,参数MISSOVER以及DSD DLM的参数意义;2.INPUT读入数据的指针;3.@符号对指针的影响。<br>
下面逐个对着程序,来解剖一下执行过程。<br>
A.DSD:规定若一个数据是由引号,那么SAS认为引号内的逗号也是属于字符数据;设定默认分隔符为逗号;连续两个分隔符之间的数据位缺失值;读入数据时去掉引号。<br>
input语句在读入观测时,先从第一行&ldquo;John,FEB,13,25,14,27,Final&rdquo;读取数据&ldquo;John,FEB&rdquo;就转入到了第二行&ldquo;John,MAR,26,17,29,11,23,Current&rdquo;,那么因为month=&quot;FEB&quot;是true<br>
所以接着在第二行&ldquo;John,MAR,26,17,29,11,23,Current&rdquo;,读入week1 week2,但是john mar都是字符型,而week1 week2默认为数值型,所以就是缺失值。继续读入week3 week4也就是26 17<br>
接着就是status 是29。读完之后回到infile,回到input,从第三行开始读&quot;Tina,FEB,15,18,12,13,Final&quot;,读入name month之后,转达到第四行&ldquo;Tina,MAR,29,14,19,27,20,Current&rdquo;。<br>
B.MISSOVER:组织INPUT从下一个数据行中读入数据,未赋值的变量就是缺失值。<br>
其实从A看出,因为第一次INPUT只读入第一数据行两个值,指针转入到第二行了。那么MISSOVER是否可以阻止呢?肯定不能阻止,因为INPUT第一次就只读入两个数据,而且第一行的数据也是</font></p>
<p><font size="4">大于2个的,所以根本就无需阻止。自己读完两个数据之后自动转向第二行。不能让第一次和第二次的input指针保留在同一行中。<br>
C.正确答案。原因很简单,因为@符号,让第一个INPUT读完数据之后,指针依然留在第一个数据行,等待第二个INPUT来读入后续的数据。<br>
D.不用解释。INFILE后面加一个@本身就是错误,编译错误</font></p> <a href="http://hi.baidu.com/crack%5Fman/blog/item/a9f21491136540187af48043.html">阅读全文</a>
               
                <br/><b>类别:</b><a href="http://hi.baidu.com/crack%5Fman/blog/category/%B8%FAcrackman%D7%F6sas%20base%C8%CF%D6%A4%CA%D4%CC%E2">跟crackman做sas base认证试题</a>&nbsp;<a href="http://hi.baidu.com/crack%5Fman/blog/item/a9f21491136540187af48043.html#comment">查看评论</a>




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