你的原始代码有问题(cards和数据流部分一定要在data步的最后)我改成这样了(去除了和你问题无关的other test数据集):
data C1 C2;
input x y;
if X eq 5 then output C1;
if Y lt 5 then output C2;
else output;
cards;
5 2
3 1
5 6
;
注意你的代码中的这两句:
if Y lt 5 then output SASUSER.TWO;
else output;
output语句中没指定out=哪个数据集。那么SAS默认是输出到你这个data步创造的所有数据集中的(c1和c2)而且这个else是跟着 if y lt 5 这个条件走的。也就是说如果y小于5 那么这条观测输出c2,如果y大于等于5,那么这条观测会输出到c1 c2两个数据集中。
详细过一遍这三个观测是怎么被处理的:
第一条观测x=5 y=2:满足第一个if,所以c1里有这条观测;满足第二个if,所以c2里有这条观测
第二条观测x=3 y=1: 不满足第一个if,没有输出到c1;满足第二个if,所以c2里有这条观测
第三条观测x=5 y=6: 满足第一个if 所以c1里写入这条观测,满足了第二个if的else条件,执行了output语句,所以再次被output到c1一遍,c2里也有了这条观测。
所以最后c1数据集中的三个观测是52/56/56 因为56这个被output了两次
而c2数据集中三个观测是52/31/56因为无论y是否小于等于5都会被output到c2的。


雷达卡





京公网安备 11010802022788号







