
你精简代码的思路是很好的。如果能加上一个判断条件,在append之前将final初始化就更好了,否则log要报错。还有就是不应该直接 data mc;这样会将原来的mc数据集覆盖的,所以你要加个前缀什么的,不影响原数据集。 这样更改之后,data _null_已无必要保留,删去!
data nonexist;
set jh;
retain ini 0;
if exist(mc) then do;
call execute("data _temp"||compress(mc)||";");
call execute("set "||compress(mc)||";");
call execute("sl="||sl||";");
call execute("mc='"||mc||"';");
call execute("run;");
ini+1;
if ini=1 then call execute("data final;set _temp"||compress(mc)||"run;");
else call execute ("proc append base=final data= _temp"||compress(mc)||"; run; ");
end;
else do; message="Dataset: "||comress(mc)||"not exist, Please Check it.";
keep mc warning;
output nonexist;
end;
run;
解决这类数据集的变量值去控制其他数据集,用call execute是最简洁有效的,只是call execute对初学者来说,不容易理解和掌握。用宏也可以实现,只是要创建一系列的动态宏变量,比如&&x&i..,比较复杂,不推荐使用
[此贴子已经被作者于2008-3-16 11:13:04编辑过]