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 语句还支持一些特有的操作符。 1)between ... and。比如: where x between 10 and 20; 等价于 where 10<=x<=20;2)contains:字符串包含。可以用问号(?)代替。比如: where firstname contains 'john'; 等价于 where firstname ? 'john'; 3)is null 或 is missing。测试是否空值。比如:where age is null; where age is missing; 4)like。用于字符串匹配。百分号 % 代表多个任意字符,下划线 _ 代表一个任意字符。比如以下的方式都匹配“john”: where firstname like 'j_h_'; where firstname like 'j%'; 5)same and。用于合并上一个 WHERE 语句。比如: where age>10; where same and sex='F'; 以上两句相当于一句: where age>10 and sex='F'; 6)min 和 max。两数中的较小或较大者。比如:where x = (a min b); |
SAS:where 语句
最新推荐文章于 2024-05-12 10:56:17 发布