我可以在数据集名称中使用通配符作为PROC CONTENTS吗?

时间:2019-02-13 14:37:55

标签: sas

在SAS服务器上,我们有一个包含数千个数据集的库。我想对这些内容的子集进行分类,所有内容的名称都以“ prov”开头。我可以使用通配符来指定吗?

我尝试过:

PROC CONTENTS DATA=library.prov*;
RUN;

但这只会产生一条带有以下错误消息的日志:

ERROR: File LIBRARY.PROV.DATA does not exist.

我还尝试了library.prov%,并且给出了相同的错误。

有100多个以“ prov”开头的数据集,所以我真的不想一次做一个。有什么想法吗?

4 个答案:

答案 0 :(得分:4)

根据您想要CONTENTS过程产生什么信息,您可以只使用DICTIONARY元数据视图。

proc sql ;
  create table want as 
  select *
  from dictionary.columns
  where libname = 'LIBREF'
    and memname like 'PROV%'
  ;
quit;

答案 1 :(得分:1)

使用WHERE数据集选项。

proc contents data=sashelp._all_ noprint out=class(where=(memname like 'CLASS%'));
   run;

答案 2 :(得分:0)

_ALL_语句中指定关键字PROC CONTENTS时,该步骤将显示指定SAS库中所有SAS文件的列表。

示例:

PROC CONTENTS DATA=libref._ALL_ NODS;
RUN;

但是要仅打开以prov开头的数据集,可以使用SQL并将CONTAINS添加到WHERE中,例如:

proc sql ;
  create table mytables as
  select *
  from dictionary.tables
  where libname = 'WORK'
  order by memname ;
quit ;

现在运行:

PROC CONTENTS DATA mytables;
RUN;

答案 3 :(得分:0)

如果您具有库SASHELP,则我可能正在使用其他版本的SAS检查,如果是,请根据您对上一个响应的评论中的注释来尝试执行此操作,您可能会发现这很适合您:

proc sql outobs=100;
create table see as 
select distinct libname,memname,crdate,modate from sashelp.vtable
where libname='LIBRARY' and memname like 'PROV%'
order by memname;
quit;