2017-06-16 36 views
1

我嘗試使用下面的代碼與文件夾中的前綴列出所有的文件名,並調用一個函數命名CALCU與文件名:SAS列表中的所有文件名的問題(授權一些文件,但不是全部)

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

我沒有辦法來測試這一點,但嘗試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文件系統視圖。這樣,你只能嘗試訪問你想要的。

+0

它說'錯誤:文件SASUSER.VMEMBER.DATA不存在.'現在 –

+0

'SASHELP.VMEMBER'不'SASUSER'。 – Joe

+0

謝謝@Joe和@DomPazz!有效。 –

相關問題