找回密码
 注册
查看: 3583|回复: 0

跟版主crackman读SAS程序(9)

[复制链接]
发表于 2010-8-27 16:11:37 | 显示全部楼层 |阅读模式
原程序
这里面看一下:pobel  bobguy这两位高手的解答
我改了一下来说一下在DATA步中改变运行程序顺序的语句

data m1;
input x z;
datalines;
1 2
3 4
5 6
7 8
9 0
;
run;
data m2;
input y n m;
datalines;
8 7 6
7 6 5
4 5 6
;
run;
data m;
set m1;
do until(last);
set m2 end=last;
if m=6 then output;
end;
run;

SET:可以从一个或多个SAS数据集中读入观测
MERGE:将两个或者多个SAS数据集中读入的观测合并为一个观测

在SET M1的之后,改变了DATA步的程序,也就是读入M1的第一条观测时,而不是继续读入第二个观测,因为有DO 循环语句改变了顺序,所以这里是先读入一条观测,然后执行DO里面的语句,在DO循环语句里面,有SET M2 END=LAST,这些是DO循环里面的循环终止条件,在读入M1的第一条观测之后,然后用循环语句遍历M2所有的观测,然后没读一次M2的观测时,都进行了IF THEN的约束判断,然后继续读入M2的第二条观测,再进行IF THEN的约束判断,符合条件的在数据部结束之前OUTPUT,同时结束循环。


如果把程序改一下:
data m1;
input x z;
datalines;
1 2
3 4
5 6
7 8
9 0
;
run;
data m2;
input y n m;
datalines;
8 7 6
7 6 5
4 5 6
;
run;
data m;
set m1;
do until(last);
set m2 end=last;
if m=6 ;
end;
run;

吧IF改成where看看有什么不一样的。
IF 和WHERE的区别是什么呢?
值得思考:
关键的区别就是 WHERE在观测读入到程序PDV之前起作用,就是先选择再读入,而IF语句对已经在PDV中的观测起作用。
所以当是WHERE是:1 2 7 8 6
当是IF:3 4 7 8 6
但是IF和IF ELSE OUTPUT又不一样

感觉自己解释很勉强
希望有人提出意见和建议
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-21 22:31 , Processed in 0.027452 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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