SAS向data语句后面指定的数据集中写入数据的情况是这样的:
1.如果数据步中没有set语句,即例如纯粹的data temp; x=1;run程序,SAS执行完一遍,即执行到x=1语句以后即将该条记录写入数据集temp(即temp中只有一条记录x=1),同时,到此结束,SAS继续执行该数据步以后的程序,例如proc print之类的;
2.如果数据步中有set语句,比如data q;set temp;run; 假设temp数据集中有1条记录x=1,那么数据步执行完第1遍以后,将该条记录x=1写入数据集q,同时,还没结束,程序继续回到开头,可以看做从data q语句开始从新执行,继续往下,执行set temp,这时候,temp的最后一条记录已经被读过,没有更多的记录可以读取了,程序跳出该数据步,继续执行后面的proc print之类的,set temp后面即使有语句也不会执行。
关于“if语句不执行,直接走到数据部(不好意思,这里应该是数据步)末尾”,就是指:
data q32;
if _n_=1 then do until (last);
set temp nobs=obs end=last;
end;
run;
执行完第一遍循环,程序回到数据步开头后,_n_=2,所以if语句不执行,即相当于前面所说的第1条,因为后面没有其它语句了,所以直接该写入1条记录到数据集q32中,因为前面set读入的记录没有被改变,所以该条记录再次被写入数据集q32,同时,到此结束(就是前面第1条所说)


雷达卡


京公网安备 11010802022788号







