全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4839 3
2013-11-13

首先附上原题和C大神的解释。
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. 6Answer: 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题这些题的时候感觉难度很大,陷阱很多,错误率很高,有点慌。想请问考过的朋友,这是正常的么?真正的考试难度跟这些题比如何?


感激不尽。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-11-13 13:56:16
IF语句和IF...THEN...语句是有区别的。
IF语句中的条件不满足的时候,SAS会直接跳过这个data步循环(_n_)后面的所有语句。
IF...THEN...语句中的条件不满足时,只是THEN后面的语句不执行,而接下来的语句还会正常执行。

data test;
   do i=1 to 5;
      if i<3;
          j+1;
          put i=;
   end;
   put j=;
run;

data test1;
  do i=1 to 5;
     if i<3 then j+1;
         put i=;
  end;
  put j=;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-11-13 14:06:25
pobel 发表于 2013-11-13 13:56
IF语句和IF...THEN...语句是有区别的。
IF语句中的条件不满足的时候,SAS会直接跳过这个data步循环(_n_) ...
我就猜是这样,但是不确定!
顿悟了,感激不尽。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-4-16 16:49:33
一下是从sas base guide复制来的,即当阅读sas data set的时候pdv不会被重新设置为missing,希望有帮助:

When reading variables from raw data, SAS sets the value of each variable in the DATA step to missing at
the beginning of each cycle of execution, with these exceptions:
• variables that are named in a RETAIN statement
• variables that are created in a sum statement
• data elements in a _TEMPORARY_ array
• any variables that are created with options in the FILE or INFILE statements
• automatic variables.
In contrast, when reading variables from a SAS data set, SAS sets the values to missing only before the
first cycle of execution of the DATA step. Therefore, the variables retain their values until new values
become available (for example, through an assignment statement or through the next execution of a SET or
MERGE statement). Variables that are created with options in the SET or MERGE statements also retain
their values from one cycle of execution to the next. (You learn about reading SAS data sets, working with
arrays, and using the SET and MERGE statements in later chapters.)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群