我有一个大型数据集,用于指定不同libnames中数据集的变量元数据(从sashelp.vcolumn
拉出来。
运行这个我有以下代码输出一个大程序的代码 - 这工作正常。但是我已经发现我需要转移文件名以在相应的目录中为它遇到的每个新libname生成一个程序:
data _null_ ;
set metadata end=eof ;
by libname memname ;
file sascode ;
if first.libname then put "proc datasets lib=" libname " nolist ;";
if first.memname then put " modify "memname ";";
if last.libname then put " run;
if eof then put "quit ;";
run ;
是否可以将file
语句重定向到每个first.libname
的正确目录?
答案 0 :(得分:2)
答案 1 :(得分:1)
为了扩展Reeza的答案,以下是使用dictionary.libnames
中元数据的方法。我在这里使用dictionary.tables
,但是如果您需要使用.columns
来获取(无论您对列进行了什么操作),那么它也应该可以正常工作。
libname temp 'c:\temp';
data class temp.class;
set sashelp.class;
run;
proc sql;
create table metadata as
select T.libname, T.memname, L.path
from dictionary.tables T, dictionary.libnames L
where T.libname=L.libname
and T.memname='CLASS'
and level=0 /* this eliminates SASHELP lib which is a bit crazy */
;
quit;
data _null_ ;
set metadata end=eof;
by libname path memname ;
fn = cats(path,'\sasfile.sas');
file sascode filevar=fn;
if first.libname then put "proc datasets lib=" libname " nolist ;";
if first.memname then put " modify " memname ";";
if last.libname then put " run; quit;";
run ;