楼主: MiSH2HK
3893 10

[问答] SAS base 70题里的第35题Write to multiple data sets [推广有奖]

  • 0关注
  • 1粉丝

VIP1

大专生

36%

还不是VIP/贵宾

-

威望
0
论坛币
2022 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
382 点
帖子
35
精华
0
在线时间
39 小时
注册时间
2015-2-1
最后登录
2016-12-23

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
                                                                                                                                               

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

Crackman 的解释如下:

当从数据集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条


红色部分是我没有看懂的部分,能有哪位高人解释下么? 5 2 和 5 6 这两条数据为什么重复了?







                       
               

二维码

扫码加我 拉你入群

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

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

关键词:Multiple SAS base multip write multi multiple

沙发
wtxhpx1991 在职认证  发表于 2016-3-6 18:09:00 |只看作者 |坛友微信交流群
我觉得可以这么理解,前两个if语句分别输出符合条件的数据到对应的数据集中,每个数据集的输出是2、2、0,最后的output将SASDATA.TWO输出到三个数据集中,每个数据集的输出是3、3、3,最后的结果是5、5、3。一般情况下,PDV的数据要等一个data步循环全部结束了才清除。

使用道具

藤椅
MiSH2HK 发表于 2016-3-6 21:19:26 |只看作者 |坛友微信交流群
wtxhpx1991 发表于 2016-3-6 18:09
我觉得可以这么理解,前两个if语句分别输出符合条件的数据到对应的数据集中,每个数据集的输出是2、2、0,最 ...
原来是这样,最后的一个output 是将这个data set 重新输出一遍,谢谢!

使用道具

板凳
MiSH2HK 发表于 2016-3-16 22:53:23 |只看作者 |坛友微信交流群
MiSH2HK 发表于 2016-3-6 21:19
原来是这样,最后的一个output 是将这个data set 重新输出一遍,谢谢!
不好意思,如果将output 改成else output others; 为什么others 里还有一个observation?

使用道具

报纸
datatools 发表于 2016-3-17 02:54:54 |只看作者 |坛友微信交流群
最新考题中,这个题目变化了。请一定注意细节。答案部分我记不清楚了。

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;
      else output other;
   run;

What is the result?

使用道具

地板
MiSH2HK 发表于 2016-3-17 21:33:01 |只看作者 |坛友微信交流群
datatools 发表于 2016-3-17 02:54
最新考题中,这个题目变化了。请一定注意细节。答案部分我记不清楚了。

given the SAS data set SASDATA ...
我知道滴,所以我就想知道 为什么加了一个 else 答案就一样了

使用道具

7
datatools 发表于 2016-3-17 21:50:42 |只看作者 |坛友微信交流群
新加的else与最后一个if是一个语法。

新改的问题,可以这样解读。

第一步 把 X=5的输出到 sasuser.one中

第二步 把 Y< 5的输出到sasuser.two 中,其它的(也就是Y>=5)输出到 other 中。

原来的 问题可以这样解读:

第一步 把 X=5的输出到 sasuser.one中

第二步 把 Y< 5的输出到sasuser.two 中

第三步把3组数据都输出到sasuser.one, sasuser.two, other中。

不知道还有没有别的解释。

使用道具

8
MiSH2HK 发表于 2016-3-18 22:25:54 |只看作者 |坛友微信交流群
datatools 发表于 2016-3-17 21:50
新加的else与最后一个if是一个语法。

新改的问题,可以这样解读。
完全理解啦!原来else output 是紧跟上一个if 条件!

使用道具

9
jingcocoa 发表于 2017-8-4 18:02:57 |只看作者 |坛友微信交流群
学习了!

使用道具

10
7s7hyd 在职认证  发表于 2017-8-7 07:25:20 |只看作者 |坛友微信交流群
datatools 发表于 2016-3-17 21:50
新加的else与最后一个if是一个语法。

新改的问题,可以这样解读。
解释得非常清楚~  谢谢!

使用道具

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

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

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

GMT+8, 2024-4-26 11:55