请选择 进入手机版 | 继续访问电脑版
楼主: 是风啊
11068 11

[学习分享] where语句和数据集选项中where表达式的区别 [推广有奖]

  • 1关注
  • 18粉丝

讲师

12%

还不是VIP/贵宾

-

威望
0
论坛币
2240 个
通用积分
4.0205
学术水平
38 点
热心指数
45 点
信用等级
37 点
经验
362 点
帖子
372
精华
1
在线时间
313 小时
注册时间
2011-9-17
最后登录
2017-11-30

是风啊 发表于 2013-9-28 11:07:59 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
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
与程序一的运行结果一样,
二维码

扫码加我 拉你入群

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

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

关键词:Where HERE whe 表达式 数据集 表达式 where

本帖被以下文库推荐

ykhefnmqj 发表于 2013-9-28 12:35:47 |显示全部楼层 |坛友微信交流群

使用道具

妖帝东皇 发表于 2013-9-28 17:58:34 |显示全部楼层 |坛友微信交流群
学习了!
┏━━━━━━━━━━━━━━┓
   ☞❤学而无友必然孤陋寡闻!❤
┗━━━━━━━━━━━━━━┛

使用道具

pobel 在职认证  发表于 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  您说的是上述程序二的情况吗?

使用道具

pobel 在职认证  发表于 2013-9-28 22:38:19 |显示全部楼层 |坛友微信交流群
是风啊 发表于 2013-9-28 20:44
pobel  您说的是上述程序二的情况吗?
对,就是程序二的情况,不好意思,刚才没认真看程序下面的解释。

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

使用道具

bobguy 发表于 2013-9-29 03:55:56 |显示全部楼层 |坛友微信交流群
Your understanding is right.

If you use both the WHERE= data set option and the WHERE statement in the same DATA step, SAS ignores the WHERE statement for data sets with the WHERE= data set option. However, you can use the WHERE= data set option with the WHERE command in SAS/FSP software.

使用道具

yann_sisi 发表于 2014-11-16 17:38:15 |显示全部楼层 |坛友微信交流群
学习啦

使用道具

wh7064rg 发表于 2014-11-17 11:03:11 |显示全部楼层 |坛友微信交流群
学习了

使用道具

sophie262 发表于 2016-7-19 22:11:18 |显示全部楼层 |坛友微信交流群
哇 ,学习到了

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-17 06:45