SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 3216|回复: 8
打印 上一主题 下一主题

IF 和 WHERE 的区别

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-3-3 15:42:05 | 只看该作者

IF 和 WHERE 的区别

看到一道题目问sas里面if和where的区别?
还有一道题目是要举个例子,用一个data step 生成多个 data sets。

感觉满偏的,请高手解决一下。多谢啦!!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-3-3 16:02:14 | 只看该作者

Re: IF 和 WHERE 的区别

生成多个数据集的例子
[code:1j70c946]data a b;
input sex$ country$;
if sex="f" then output a;
if sex="m" then output b;
cards;
f china
m china
f america
m australia
;
[/code:1j70c946]是这种么?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-3-3 16:10:47 | 只看该作者

Re: IF 和 WHERE 的区别

多谢楼上的回复。知道是怎么回事了。
那请问if 和 where 有什么区别呢?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2008-3-3 17:11:34 | 只看该作者

Re: IF 和 WHERE 的区别

仔细比较一下log,你一定能自己悟出区别的。
[quote:2hccy8i8]1    data a;
2    set sashelp.class;
3    if sex='F';
4    run;

NOTE: There were 19 observations read from the data set SASHELP.CLASS.
NOTE: The data set WORK.A has 9 observations and 5 variables.
NOTE: DATA statement used (Total process time):
      real time           0.35 seconds
      cpu time            0.00 seconds


5
6    data b;
7    set sashelp.class;
8    where sex='F';
9    run;

NOTE: There were 9 observations read from the data set SASHELP.CLASS.
      WHERE sex='F';
NOTE: The data set WORK.B has 9 observations and 5 variables.
NOTE: DATA statement used (Total process time):
      real time           0.04 seconds
      cpu time            0.01 seconds[/quote:2hccy8i8]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2008-3-3 21:14:29 | 只看该作者

Re: IF 和 WHERE 的区别

多谢回复。
是不是说if的话会从原数据集中将所有记录都读出来,然后筛选,存入新数据集;
而where的话直接将符合条件的记录筛选出来存入新数据集;
所以where的效率应该要高于if。

不知道是不是这样理解的。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2008-3-4 00:21:47 | 只看该作者

Re: IF 和 WHERE 的区别

对于where总结如下:
WHERE语句读入数据集之前选择观测。
使用WHERE语句时,因为SAS系统只从输入数据集中读入满足条件的观测,所以这样的SAS程序更有效。
WHERE语句不是可执行语句,它起不到IF-THEN语句的作用。
能用WHERE语句的地方一定可以用IF语句来代替,反之则不行。不过,一旦WHERE语句有效,就一定要用它,因为这样的程序效率高。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2008-3-20 10:54:38 | 只看该作者

Re: IF 和 WHERE 的区别

where效率高,if灵活,譬如where _n_>3 会报错,但可以用if _n_>3
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2008-3-27 01:31:22 | 只看该作者

to wind

Can't agree more.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2008-3-28 16:29:39 | 只看该作者

Re: IF 和 WHERE 的区别

IF 和 WHERE 除了樓上提出的分別外
Table index 都會被 IF 和 WHERE 有所分別
WHERE 是會運用 index, 但 IF 不會 (但其實 WHERE 有某些情況下也不會運用  index)

還有
WHERE 可以用到  contain 之類既 keywords, 但 IF 是不可以的
比類而言, WHERE 就像 SQL 的 WHERE 的用法
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-4 16:22 , Processed in 0.079149 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表