SAS WHERE 语句的使用
(2012-07-20 12:15:17)
标签:
杂谈 |
引自:http://jiaoyan.org/wiki/SAS_WHERE_语句
SAS WHERE 语句用于 SAS 数据步骤或过程语句中,用于筛选数据行。
简介
WHERE 语句的格式很简单,只要后面跟用于数据筛选的逻辑表达式即可:
WHERE logical-expression(s);
下面的例子基于 test1 数据表生成 test2 数据表,但是只选择满足 sex='F' 并且 age>20 的数据行:
data test2; set test1; where sex='F' AND age>20; run;
表面看来,WHERE 语句和数据步骤中的 SAS IF 语句的功能相近,都是筛选数据和。实际上 WHERE 语句和 IF 语句的运作机制是不同的。WHERE 语句相当于对数据集执行了一个 SQL Select 的操作。也就是说,在进入到操作前数据已经被整体筛选过了,而 IF 语句是在数据步骤的每个循环中单独执行的,WHERE 语句显然效率要提高很多。如果数据表是索引过的,那么 WHERE 语句能够更加显著地提高效率。
WHERE 语句也有其限制。因为它是对现存的数据表的整体性操作,故而只能对该数据表中已有的变量进行筛选操作,不能对数据处理后生成的变量操作,也不能对 INPUT 语句定义的变量操作。
WHERE 语句不但能用于数据步骤中还能用于过程语句中。
操作符
除了一般的 SAS 操作符(见 SAS 语法),WHERE 语句还支持一些特有的操作符。
between ... and。比如:
where x between 10 and 20;
其实相当于:
where 10<=x<=20;
contains。字符串包含。可以用问号代替。比如:
where firstname contains 'john';; where firstname ? 'john'
is null 或 is missing。测试是否空值。比如:
where age is null;; where age is missing
like。用于字符串匹配。百分号
where firstname like 'j_h_';
where firstname like 'j%';
same and。用于合并上一个 WHERE 语句。比如:
where age>10;
where same and sex='F';
以上两句相当于一句:
where age>10 and sex='F';
min 和 max。两数中的较小或较大者。比如:where x = (a min b);