如何从SAS中的目录和目录(包括路径和数据集名称)中获取所有列名称

时间:2019-07-11 21:20:57

标签: directory path sas subdirectory

我需要列出目录和子目录中所有表的所有列名称。

但是,我尝试使用dictionary.columns,但是它没有显示子目录中的数据集

这是代码

create table Kiwi.summarytablecolumns as select * from 
dictionary.columns where libname="Kiwi";
;
quit;

我需要的是这样的:

表名|列名|路径|

2 个答案:

答案 0 :(得分:3)

@Python R SAS解决方案的修改,

  1. 从宏更改为完整数据步骤解决方案
  2. 仍然从字典表中查询

/ *获取所有子目录的列表* /

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;