SAS 中if和where的区别

来源:互联网 发布:老司机网络什么意思 编辑:程序博客网 时间:2024/06/05 05:47
原文地址:中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=10obs=15时,if语句和where语句用法结果相同,但有这两个选项时效果就不同了。有这两个选项,if语句是从原数据集(或数据源)的观测记录进行计算个数,即从原数据集的第10号观测开始读入到PDV中,然后再判断是否满足if条件,若满足则输出到外部数据集,直到原数据集的第15号观测结束。而where语句是在读入到PDV之前就进行判断的,所以这里的firstobs的意思是从使得满足where条件的第10个观测开始,而不是原数据集的第10个观测开始。

0 0
原创粉丝点击