批量delete或drop数据集

来源:互联网 发布:linux卸载软件 yum 编辑:程序博客网 时间:2024/05/16 17:07
批量delete或drop数据集

经过一系列的程序,work临时文件夹里有了很多过程数据集比如a1,a2,a3……;感觉看着不爽想删掉,怎么办?
你可以这么做:
proc delete data=a1 a2 a3;run;
如果你想精简程序为:
proc delete data=a1-a3;run;
那么很遗憾,sas出错了,因为proc delete 读不懂a1-a3;
如果临时数据集很多比如有99个,恰好都是a开头,如果1个1个分开写,估计会累死;那么怎么办?
其实,这么有规律的数据集,你就可以用循环语句了,你可以这么来
%macro dd;
%do i=1 %to 99;
proc delete data=a&i;run;
%end;
%mend;
%dd;
这样你就可以搞定了。
这比上面分开写99个数据集好多了。
如果你是程序控,你一定会觉得不爽,还是觉得烦了,那么有无更简便方法,答案是有的。
利用proc datasets 过程;你可以这么写
proc datasets lib=work ;delete a1-a99;run;
于是世界清静了。proc datasets 比 proc delete 聪明,a1-a99,他懂的!
到此为止,一般人不会再研究了,但是“程序控”还是不爽,因为如果临时数据集如果名字没那么规律怎么办?
其实proc datasets 功能很强大,他可以像 keep 和 drop 那样,drop太多了不好写,可以写keep,只是在datasets里面它用的是save 和 delete。
datasets其他用法,程序控们可以参见http://blog.sina.com.cn/s/blog_5d3b177c0100bamo.html

例1: drop表
利用循环依次删除表
Tmp_cwy_zfb_1610
Tmp_cwy_zfb_1611
Tmp_cwy_zfb_1612

%macro dd;
%do i=10 %to 12;
*rsubmit;
proc sql;
drop table rdmtmp.Tmp_cwy_zfb_16&i.;
quit;
*endrsubmit;
%end;
%mend;
%dd;

例2: delete表: 删除t1,t2,t3
proc sql;
create table rdmtmp.t1(id varchar(10));
create table rdmtmp.t2(id varchar(10));
create table rdmtmp.t3(id varchar(10));
quit;

proc datasets lib=rdmtmp; delete t1-t3; run;
原创粉丝点击