SAS 中if和where的区别

原文地址:SAS 中if和where的区别 作者:峰峦清逸

转自:http://www.dxyer.cn/yanyk/tag/sas-条件语句-if-where/

 

平时经常使用if和where,无意中查到百度知道中有一个帖子,讲解if和where,一目了然(原文http://zhidao.baidu.com/question/208729911.html):

data tmp;
  set SASHELP.workers(firstobs=10 obs=15);
  if ELECTRIC>260;
run;
proc print;run;

                                 Obs     DATE    ELECTRIC    MASONRY

                                     OCT77      278.6      288.7
                                     NOV77      276.2      286.2
                                     DEC77      274.6      276.7
                                     JAN78      262.1      234.3
输出4条记录。
解法2:
data tmp;
  set SASHELP.workers(firstobs=10 obs=15);
  where ELECTRIC>260;
run;
proc print;run;
                                 Obs     DATE    ELECTRIC    MASONRY

                                     MAY78      278.0      295.5
                                     JUN78      289.5      308.3
                                     JUL78      296.6      306.9
                                     AUG78      305.1      315.3
                                     SEP78      307.8      310.6
                                     OCT78      308.2      316.3
输出6条记录。

思考:上述两种解法为什么输出不一样?请注意if语句和where语句的区别。
区别:
1. if语句是面向PDV的,对当前PDV中的数据进行判断,满足条件时将其写入到外部数据集;where语句也是面向PDV的,它使用于从外部数据源读数据到PDV之前进行判断,当满足条件时才被写入到PDV。显然一个在写入PDV之前,一个在写入PDV之后,两者是有差异的。
2. 当没有数据集选项firstobs=10 obs=15时,if语句和where语句用法结果相同,但有这两个选项时效果就不同了。有这两个选项,if语句是从原数据集(或数据源)的观测记录进行计算个数,即从原数据集的第10号观测开始读入到PDV中,然后再判断是否满足if条件,若满足则输出到外部数据集,直到原数据集的第15号观测结束。而where语句是在读入到PDV之前就进行判断的,所以这里的firstobs的意思是从使得满足where条件的第10个观测开始,而不是原数据集的第10个观测开始。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值