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