使用proc sql来选择大量文件的问题

时间:2018-11-28 19:01:37

标签: sas proc-sql

我正在尝试使用下面的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 :(得分:3)

MYLIBNAME是无效的libref。 Librefs最多可包含8个字符。 MYLIBNAME是9个字符,因此在SAS会话中将没有与之匹配的libref。

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

要小心包含数千个表的库。宏变量只能为64K-2个字符。

答案 1 :(得分:1)

@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;