Проблема с proc sql для выбора большого количества файлов - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь выбрать большое количество файлов, используя оператор proc sql ниже

proc sql;
   select cats(libname, ".",memname) into :names separated by " " 
   from dictionary.tables
   where upcase(libname) = "MYLIBNAME";
quit;

, но когда я пишу %PUT Data sets: &names;, в файле журнала ничего не появляется, и я получаю сообщение об ошибке, сообщающее макросnames не разрешено.Есть идеи, что здесь происходит не так?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

@ Ответ Ричарда идеален.если он по-прежнему не работает, выполните следующие действия.

  1. попробуйте outobs = 1, просто проверьте с предложением where и без него

     proc sql outobs= 1;
     select cats(libname, ".",memname) into :names separated by " " 
      from dictionary.tables
      where upcase(libname) = "SASHELP";
     quit;
    
    %put &names;
    
  2. использовать содержимое процедуры с последующей конкатенацией.на следующем шаге будет отображаться ошибка, если ваша макропеременная длиннее 65534

    PROC CONTENTS DATA=SASHELP._ALL_  out= new(keep=memname libname) noprint; RUN
    
    proc sql;
    select cats(libname, ".",memname) into :names separated by " " 
      from new;
    
0 голосов
/ 28 ноября 2018

MYLIBNAME является недействительным libref.У Librefs максимум 8 символов.MYLIBNAME состоит из 9 символов, поэтому в вашей сессии SAS не будет определено никаких librefs, которые могут ему соответствовать.

Что произойдет, если вы попробуете libname = "WORK" или libname = "SASHELP"?Макропеременная names будет заполнена.

Будьте осторожны с библиотеками, содержащими тысячи таблиц.Макропеременная может содержать не более 64K-2 символов.

...