楼主: 是风啊
12007 11

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

  • 1关注
  • 18粉丝

已卖:214份资源

讲师

12%

还不是VIP/贵宾

-

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

楼主
是风啊 发表于 2013-9-28 11:07:59 |AI写论文

+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时起作用。
和谐拯救危机

7
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.

8
yann_sisi 发表于 2014-11-16 17:38:15
学习啦

9
wh7064rg 发表于 2014-11-17 11:03:11
学习了

10
sophie262 发表于 2016-7-19 22:11:18
哇 ,学习到了

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-19 09:17