1. 条件语句where和if的区别
从上图可以看出,where在原始数据进入PDV(program data vector)前对数据进行判断,是否满足条件,满足的条件的观测值进入PDV,不满足的则排除,PDV简单的说就是在编译过程中用于存储新建数据集变量值的空间。而if是将原始数据集中的所有值放入PDV后进行条件判断,满足条件的输出到新建数据集中。因此使用where条件筛选速度快于if。where只能从现有的sas数据集中选择观测,if语句还可以用input语句产生的观测中选。Where可以作为选项进行应用。
3.sql里where和having的区别
sas sql里where和having条件的选择规则类似于sas data set新建if和where的区别,having是对sql语句中groupby分割后的亚组数据集进行条件筛选,先按亚组计算将计算结果新变量放入新建表(tables)中,在按照having指定条件对亚组进行筛选;因此having需在group by语句后,而where是对整个数据集进行筛选,先筛选出符合条件的观测对象,再按照group by分割的亚组进行计算,产生的新变量再放入新建表中,where语句需在group by之前;而当无groupby语句时having的作用相当于where;