首页 > 代码库 > sas条件判断语句

sas条件判断语句

if语句<可执行语句>

data b;    set sashelp.class;    if _n_ le 4;  *如果if为真,则继续执行if后面的语句,最后输出满足if的条件的观测,如果if为假则立刻返回到data步开头继续执行下一条set语句;    y = now;
  /*
  y = ‘now‘;
  if _n_ le 4;也能得出同样的结果,但是效率相对来说较低,因为要重复执行y的赋值语句
*/run;

if的另外两种格式
if x=3 then y=4; 对于要表达的只有一条数据就用then
if x=3 then do y=4;z=5;end;  对于要表达的有多条语句就用then do end;

 where语句(where=选项)<不可执行语句>

 是在系统准备把观测读入pdv之前制定数据必须满足的一个条件。

WHERE where-expression-1<logical-operator where-expression-n>;

logical-operator can be AND, AND NOT, OR, or OR NOT

where表达式的算符:between and、is missing (is null)、contain (?)、like、same and、in

TIPS:

  1:where语句不能与自动变量连用,因为where语句在pdv之前执行

    2:使用where语句时,必须保证读入数据集的完整性,不能使用firstobs=2等不能完整读入数据集的选项

  3:当where选项与where语句同时作用于一个数据集的时候,系统只会考虑where选项

  4:当data步包含where语句和by语句时,where语句先于by语句之前被执行,by组对执行完毕后的数据集重新定义first/last变量。

  5:能用contains的地方都能用like、所以首先考虑用like。where x like a_b%; ‘_‘表示正好有一个字符与之匹配,‘%‘表示可以替代任意多个字符

data a;    input x y@@;    cards;    1 10 1 20 0 200 2 30 2 40    3 50 3 60 4 70 3 80 4 400    ;run;proc sort data=a;by x;run;data b;    set a;    *where x ; *后面不添加条件是筛选x不为0和不为缺失值的数值型数据,只适用于数值型;    where x is not missing; *筛选x不为缺失值的数据包括0,适用于数值型和字符型;run;proc print data=b noobs;

 where和if的最重要的几点区别

1:where不可执行、if可执行

2:where有自己特定的表达式,if是是通用表达式 例如where x is missing;

3:where只能从现有的sas数据集中选择观测,if语句还可以用input语句产生的观测中选择。*商用的一般都是现有的sas数据集;

4:where的效率比if高

5:何时使用if何时使用where?如果需要对pdv观测进行处理才能决定哪条观测,只能使用if。其余能使用where