我正在尝试使用下面的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
未解析。知道这里出什么问题了吗?
答案 0 :(得分:3)
MYLIBNAME
是无效的libref。 Librefs最多可包含8个字符。 MYLIBNAME是9个字符,因此在SAS会话中将没有与之匹配的libref。
如果尝试使用libname = "WORK"
或libname = "SASHELP"
会发生什么?宏变量names
将被填充。
要小心包含数千个表的库。宏变量只能为64K-2个字符。
答案 1 :(得分:1)
@Richard的答案很完美。如果仍然无法正常工作,请执行以下操作。
尝试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;
使用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;