加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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 nullis missing。测试是否空值。比如:

where age is null;   where age is missing;

like。用于字符串匹配。百分号 % 代表多个任意字符,下划线 _ 代表一个任意字符。比如以下的方式都匹配“john”:

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';

minmax。两数中的较小或较大者。比如:where x = (a min b);

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有