where语句 和
数据集选项中where表达式,作用在同一数据集和不同数据集时输出结果会有所不同,举例如下:
程序一:
data a;
input x1 x2;
cards;
1 2
3 4
5 6
7 8
;
data b(where=(0<x1<5));
set a;
where x1<2;
proc print data=b;
run;
运行结果如下:
SAS 系统 2013年09月28日 星期六 上午10时32分32秒 6
Obs x1 x2
1 1 2
程序二:
data a;
input x1 x2;
cards;
1 2
3 4
5 6
7 8
;
data b;
set a(where=(0<x1<5));
where x1<2;
proc print data=b;
run;
运行结果如下:
SAS 系统 2013年09月28日 星期六 上午10时32分32秒 7
Obs x1 x2
1 1 2
2 3 4
对于程序一来说,data b(where=(0<x1<5));语句作用在数据集b上,而where x1<2;语句作用在数据集a上,故结果应该是类似于取两者交集的结果,(嘿嘿,不大好表达,,),而对于程序二来说,set a(where=(0<x1<5));语句和where x1<2;语句都是作用在同一个数据集a上,但是我们知道,当where语句和数据集选项中where表达式作用在同一数据集时,SAS会认为数据集选项中where表达式有效,而此时的where语句无效,即此时set a(where=(0<x1<5));语句有效,where x1<2;语句无效。欧了,
另外,对于程序一还可以这样更加直观的理解:
程序一.1
data a;
input x1 x2;
cards;
1 2
3 4
5 6
7 8
;
data b(where=(0<x1<5));
set a(where=(x1<2));/*与程序一相比变动之处*/
proc print data=b;
run;
运行结果如下:
SAS 系统 2013年09月28日 星期六 上午10时32分32秒 9
Obs x1 x2
1 1 2
与程序一的运行结果一样,