SAS中文论坛

标题: IF 和 WHERE 的区别 [打印本页]

作者: shiyiming    时间: 2008-3-3 15:42
标题: IF 和 WHERE 的区别
看到一道题目问sas里面if和where的区别?
还有一道题目是要举个例子,用一个data step 生成多个 data sets。

感觉满偏的,请高手解决一下。多谢啦!!!
作者: shiyiming    时间: 2008-3-3 16:02
标题: 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]是这种么?
作者: shiyiming    时间: 2008-3-3 16:10
标题: Re: IF 和 WHERE 的区别
多谢楼上的回复。知道是怎么回事了。
那请问if 和 where 有什么区别呢?
作者: shiyiming    时间: 2008-3-3 17:11
标题: 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]
作者: shiyiming    时间: 2008-3-3 21:14
标题: Re: IF 和 WHERE 的区别
多谢回复。
是不是说if的话会从原数据集中将所有记录都读出来,然后筛选,存入新数据集;
而where的话直接将符合条件的记录筛选出来存入新数据集;
所以where的效率应该要高于if。

不知道是不是这样理解的。
作者: shiyiming    时间: 2008-3-4 00:21
标题: Re: IF 和 WHERE 的区别
对于where总结如下:
WHERE语句读入数据集之前选择观测。
使用WHERE语句时,因为SAS系统只从输入数据集中读入满足条件的观测,所以这样的SAS程序更有效。
WHERE语句不是可执行语句,它起不到IF-THEN语句的作用。
能用WHERE语句的地方一定可以用IF语句来代替,反之则不行。不过,一旦WHERE语句有效,就一定要用它,因为这样的程序效率高。
作者: shiyiming    时间: 2008-3-20 10:54
标题: Re: IF 和 WHERE 的区别
where效率高,if灵活,譬如where _n_>3 会报错,但可以用if _n_>3
作者: shiyiming    时间: 2008-3-27 01:31
标题: to wind
Can't agree more.
作者: shiyiming    时间: 2008-3-28 16:29
标题: Re: IF 和 WHERE 的区别
IF 和 WHERE 除了樓上提出的分別外
Table index 都會被 IF 和 WHERE 有所分別
WHERE 是會運用 index, 但 IF 不會 (但其實 WHERE 有某些情況下也不會運用  index)

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




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2