首先附上原题和Crackman blog里的解释。
21.Given the SAS data set WORK.PRODUCTS:
ProdId Price ProductType Sales Returns
—— —– ———– —– ——-
K12S 95.50 OUTDOOR 15 2
B132S 2.99 CLOTHING 300 10
R18KY2 51.99 EQUIPMENT 25 5
3KL8BY 6.39 OUTDOOR 125 15
DY65DW 5.60 OUTDOOR 45 5
DGTY23 34.55 EQUIPMENT 67 2
The following SAS program is submitted:
data WORK.OUTDOOR WORK.CLOTH WORK.EQUIP;
set WORK.PRODUCTS;
if Sales GT 30;
if ProductType EQ ‘OUTDOOR’ then output WORK.OUTDOOR;
else if ProductType EQ ‘CLOTHING’ then output WORK.CLOTH;
else if ProductType EQ ‘EQUIPMENT’ then output WORK.EQUIP;
run;
How many observations does the WORK.OUTDOOR data set contain?
A. 1
B. 2
C. 3
D. 6
Answer: B
本文属于博客:http://crackman.net 版权归作者所有,如有转载,请注明出处!未经本作者同意不得用于商业应用。其他本博客文章均作此声明!
其实这里考察的是IF ELSE语句以及OUTPUT语句的应用.
在这里一定要记住一个执行过程,就是通过SET每读入一条语句之后,例如第一行:“ K12S 95.50 OUTDOOR 15 2 ”
IF THEN 语句开始作出判断,IF 为真才执行THEN后面的语句,否则就是ELSE的语句操作。
具体的流程可以参考签名几个题目的解析。
35.given the SAS data set SASDATA.TWO:
X Y
— –
5 2
3 1
5 6
The following SAS program is submitted:
data SASUSER.ONE SASUSER.TWO OTHER;
set SASDATA.TWO;
if X eq 5 then output SASUSER.ONE;
if Y lt 5 then output SASUSER.TWO;
output;
run;
What is the result?
A.
data set SASUSER.ONE has 5 observations
data set SASUSER.TWO has 5 observations
data set WORK.OTHER has 3 observations
B.
data set SASUSER.ONE has 2 observations
data set SASUSER.TWO has 2 observations
data set WORK.OTHER has 1 observations
C.
data set SASUSER.ONE has 2 observations
data set SASUSER.TWO has 2 observations
data set WORK.OTHER has 5 observations
D. No data sets are output. The DATA step fails execution due to syntax errors.
Answer: A
本文属于博客:http://crackman.net 版权归作者所有,欢迎转载!如有转载,请务必注明出处!未经本文作者同意不得用于商业应用。
这道题是一个非常有意思的题。
其实考察的就是两个output语句对数据输出的影响。
下面对数据的执行过程进行解析:
程序编译之后,建立了PDV。
当从数据集SASDATA.TWO中读入第一条数据,
开始IF判断,判断为真就是OUTPUT到SASUSER.ONE数据集中。但是这里没有交代如果为假将会怎么样。我个人认为即使是假,也不会做任何处理。因为没有在假这个条件下的执行语句。
继续判断,如果Y lt 5 then output SASUSER.TWO;
记住一个点,也是PDV中,一条观测的在PDV中存在周期问题,如果OUTPUT出去了,是不是PDV中这一条数据就立即消失,全部为默认值了?这里就是关键所在,我个人觉得这个时候PDV没有中新的SET SASDATA.TWO或者INPUT时候,PDV应该是保留上次的值。那么到了
OUTPUT语句时,其实默认输出到三个数据集中。
所以导致5 2 这条观测以及5 6 这条被输出两次到SASUSER.ONE,加上3 1这一条是通过最后一条OUTPUT语句输出的,所以就是5条。
同样SASUSER.TWO也是5条 OTHER是3条
大部分我都能理解,现在我的问题是:按照答案分析,21题中,如果“If Sales GT 30”这个是false,那我们则跳过下面所有的"if"code,这样我们才有答案2,因为第一行数据我们是不读取进work.output的。然后我们看35题,这题如果按解释和答案的意思,就算"X eq5 then output SASUSER.ONE"这条是FALSE,我们依然要运行下面“IF Y LT 5 output then SASUSER.TWO”这行code,这不是和21题矛盾了吗。我的疑惑就是当我们有一个IF statement 是false,那接下来出现的所有IF STATEMENT需要运行么?
我很困惑,希望老师帮帮我,谢谢。
另外老师,我最近在备考SAS BASE EXAM, 读online tutor还好,后面的quiz也做得不错,但是开始做123+70+50题这些题的时候感觉难度很大,陷阱很多,错误率很高,有点慌。想请问考过,这是正常的么?真正的考试难度跟这些题比如何?
感激不尽。