SAS перечисляет все имена файлов (авторизация для некоторых файлов, но не для всех)

Я пытаюсь использовать следующий код, чтобы перечислить все имена файлов с префиксом в папке и вызвать функцию с именем 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 ответ

Решение

У меня нет способа проверить это, но попробуйте 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 в каталоге. Таким образом, вы только пытаетесь получить доступ к тем, которые вы хотите.

Другие вопросы по тегам