我需要列出目录和子目录中所有表的所有列名称。
但是,我尝试使用dictionary.columns,但是它没有显示子目录中的数据集
这是代码
create table Kiwi.summarytablecolumns as select * from
dictionary.columns where libname="Kiwi";
;
quit;
我需要的是这样的:
表名|列名|路径|
答案 0 :(得分:3)
@Python R SAS解决方案的修改,
/ *获取所有子目录的列表* /
x "dir &basedirectory /s /b /o:n /ad > &basedirectory\list.txt";
filename dirs "&basedirectory\list.txt";
/* Parse each subdirectory into a macro variable */
data _null_;
retain ii 0;
infile dirs end=last;
input;
ii + 1;
rc = libname(catt("DIR", put(ii,8. -l)), _infile_);
run;
然后您的原始查询会稍作修改:
proc sql;
create table Kiwi.summarytablecolumns as
select *
from dictionary.columns
where libname like 'DIR%';
;
quit;
答案 1 :(得分:2)
%let basedirectory = C:\users;
/* Get a list of all subdirectories */
x "dir &basedirectory /s /b /o:n /ad > &basedirectory\list.txt";
filename dirs "&basedirectory\list.txt";
/* Parse each subdirectory into a macro variable */
data _null_;
retain ii 0;
infile dirs end=last;
input;
call symput("dir" || strip(put(ii,8.)),_infile_);
if last then call symput("dirnum", ii);
ii + 1;
run;
/* Process each macro variable and get contents in corresponding library. Append results to grand summary dataset */
%macro loopthrough;
%do ii = 0 %to &dirnum;
libname thislib "&&&dir&ii";
proc contents data=thislib._all_ out=contents noprint;
run;
data contents;
set contents;
length path $200;
where missing(typemem);
TableName = memname;
ColumnName = name;
Path = "&&&dir&ii";
keep TableName ColumnName Path;
run;
%if ii = 0 %then %do;
data summary;
set contents;
run;
%end;
%else %do;
proc append base=summary data=contents;
run;
%end;
%end;
%mend;
%loopthrough;