SAS列出所有文件名问题(对某些文件的授权,但不是所有文件)

时间:2017-06-16 13:34:10

标签: sas wrds-compusat wrds

我正在尝试使用以下代码列出文件夹中带有前缀的所有文件名,并使用文件名调用名为CALCU的函数:

  proc contents data=&libref.._all_ noprint out=contents; run;
  data _null_;
    set contents;
    by memname;
    if first.memname ;
    if upcase(memname) =: %upcase("&prefix");
    call execute(cats('%nrstr(%CALCU)(',memname,')'));
  run;

当我完全授权访问目录中的所有文件时,代码工作正常。但现在我发现我实际上没有一些具有某些前缀的文件的访问权限(幸运的是,我实际上并不需要那些我无法访问的文件)。

然而,SAS只是不断抛出像

这样的错误
ERROR: User does not have appropriate authorization level for file
       TAQ_CT.CTM_20120222.DATA.

即使这不是我想要的文件。

我想知道如何跳过目录中的某些文件?

我试图删除除了以下代码行之外的所有内容:

  proc contents data=&libref.._all_ noprint out=contents; run;

但是,当我无法访问所有文件时,我似乎甚至无法正确阅读内容(SAS只会在我无法访问的文件上丢失错误)。

1 个答案:

答案 0 :(得分:1)

我没有办法对此进行测试,但请尝试使用SASHELP.VMEMBER代替PROC CONTENTS

data _null_;
    set SASHELP.VMEMBER(where=(libname=upcase("&libref") and memtype = "DATA"));

    if upcase(memname) =: %upcase("&prefix");
    call execute(cats('%nrstr(%CALCU)(',memname,')'));
run;

这是一个列出目录中所有SAS文件的系统视图。这样,您只能尝试访问所需的那些。