proc sql 到 select 大量文件的问题

Issue with proc sql to select large number of files

我正尝试使用下面的 proc sql 语句select 大量文件

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

但是当我写入 %PUT Data sets: &names; 时,日志文件中什么也没有出现,并且我收到一条错误消息,指出宏 names 未解析。知道这里出了什么问题吗?

MYLIBNAME 是无效的库引用。 Libref 最多有 8 个字符。 MYLIBNAME 是 9 个字符,因此在您的 SAS 会话中将没有定义的库引用可以匹配它。

如果您尝试 libname = "WORK"libname = "SASHELP" 会发生什么?宏变量 names 将被填充。

小心包含数千个表的库。一个宏变量的长度只能是 64K-2 个字符。

@Richard 的回答很完美。如果仍然无法正常工作,请执行以下操作。

  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. 使用 proc 内容,然后连接。如果您的宏变量长于 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;