下面sas代码中,为何where与if 筛选的结果不一样,而且where的筛选结果不理解。

dataa;inputidx@@;cards;111031304140;datab;inputidy@@;cards;111002120041400;datawherea... data a;
input id x@@;
cards;
11 10 31 30 41 40
;
data b;
input id y@@;
cards;
11 100 21 200 41 400
;
data whereab;
merge a b;
where id>30;
proc print data=whereab;
run;
data ifab;
merge a b;
if id>30;
proc print data=ifab;
run;
你对if 和where 的解释深入浅出,非常感谢。
再追问个merge 和merge by 的差别。
顶上的例子涉及两个表:
id x id y
11 10 11 100
31 30 21 200
41 40 41 400
经过if 和where 的筛选结果是
id x y
41 40 400
(这个是if的结果,我已经完全明白了)

id x y
41 30 400
41 40 .
(这个是where的结果,我不理解为什么merge起来是这样的,因此做了下面两个变化)
data test1;
merge a b;
run;
data test2;
merge a b;
by id;
run;
test1 的结果我不理解, 如果这个弄懂了,那上面where 的结果自然通了。
id x y
11 10 100
21 30 200
41 40 400
test2的结果我明白,就是正常的 merge,加不加by 怎么还有区别呢?
那什么时候应该不加by呢? 我平时都是加的。
多谢多谢~~~
展开
 我来答
rabishion
2014-11-13 · TA获得超过544个赞
知道小有建树答主
回答量:240
采纳率:0%
帮助的人:315万
展开全部
主要原因是筛选的顺序有所不同,如果和你讲PDV 什么的未免太过无趣
通俗的来讲
if语句,就好比别人送快递到你家,你先请他进门再判断是不是你的,不是就退了
但是where语句呢,就好比,快递小哥在门口,你问他,是不是你的快递?不是,那就退了
所以理论上来说如果同样的是简单的筛选语句where效率优于IF语句。

顶上的句法也是一样的
一个是先MERGE好再筛选,就好比进门了再决定对不对(IF 语句)
一个是先筛选再Merge,就好比先问别人是不是,再决定是不是(WHERE语句)
追问
你对if 和where 的解释深入浅出,非常感谢。
我又追问了个问题,字数太多所以写在上面了,望解答~~
追答

MEGER 如果后面没有by ,那么就是按行号连接的

如:

data test1;
merge a b;
run;

也就是

a 的第一行接b的第一行,并且如果名称一样的变量会被后表覆盖。第二行接第二如,如此下去

data test2;
merge a b;
by id;
run;

那么就是按ID对接

a :
id   x
01   x1
02   x2

b :
id   y
01   y1
03   y2
data test1;
merge a b;
run;
的结果是:

id  x  y
01  x1  y1
03  x2  y2
而merge by 的结果是
id  x  y
01  x1  y1
02  x2  .
03      y2

当然,Merge by得先排序。


此外,这样难度的程序如果有问题是很好的,说明你在思考,但是更进一步,自己去SAS里面跑一下不就全明白了吗?

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式