全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
11863 11
2013-09-28
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
与程序一的运行结果一样,
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-9-28 12:35:47
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-9-28 17:58:34
学习了!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-9-28 19:07:47
楼主可以注意一下log。
data步中,当set语句中的where=数据集选项和where语句同时使用时,并不会同时都起作用。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-9-28 20:44:16
pobel 发表于 2013-9-28 19:07
楼主可以注意一下log。
data步中,当set语句中的where=数据集选项和where语句同时使用时,并不会同时都起作 ...
pobel  您说的是上述程序二的情况吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-9-28 22:38:19
是风啊 发表于 2013-9-28 20:44
pobel  您说的是上述程序二的情况吗?
对,就是程序二的情况,不好意思,刚才没认真看程序下面的解释。

程序一中,where语句和where=所产生的是两个条件交集。不过在运行时的执行时间应该会有差别。
where语句是在读入数据集a时起作用的,而where=是在输出数据集b时起作用。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群