SAS系统会将 SAS libraries, data sets (tables), catalogs, indexes, macros, system options, titles, views 等的元数据(metadata)收集到一类叫做 dictionary tables 的表单中。
Dictionary tables 提供当前SAS运行环境的 系统相关信息。
可以理解为: dictionary tables 提供了SAS 相关的元数据(Metadata)。
每个 dictionary table 对应 sashelp逻辑库下的view。
A DICTIONARY table is a read-only SAS view that contains information about SAS libraries, SAS data sets, SAS macros, and external files that are in use or available in the current SAS session.
A DICTIONARY table also contains the settings for SAS system options that are currently in effect.
Dictionary table 包含 当前SAS运行环境下的所有 逻辑库、数据集、宏、外部文件等信息。
例如当前运行环境的数据集的所有列(变量)的:name, type, length, and format 等信息。
PROC SQL ;
Select distinct memname
from dictionary.dictionaries;
QUIT;
结果,输出如下 所有的 Dictionary Tables:
CATALOGS CHECK_CONSTRAINTS
COLUMNS CONSTRAINT_COLUMN_USAGE
CONSTRAINT_TABLE_USAGE DATAITEMS
DESTINATIONS DICTIONARIES
ENGINES EXTFILES
FILTERS FORMATS
FUNCTIONS GOPTIONS
INDEXES INFOMAPS
LIBNAMES LOCALES
MACROS MEMBERS
OPTIONS PROMPTS
PROMPTSXML REFERENTIAL_CONSTRAINTS
REMEMBER STYLES
TABLES TABLE_CONSTRAINTS
TITLES VIEWS
VIEW_SOURCES XATTRS
例如:查看 dictionary.options
PROC SQL;
DESCRIBE TABLE
DICTIONARY.OPTIONS;
QUIT; 在log中会显示:
create table DICTIONARY.OPTIONS
(
optname char(32) label='Option Name',
opttype char(8) label='Option type',
offset num label='Offset into option value',
setting char(1024) label='Option Setting',
optdesc char(160) label='Option Description',
level char(8) label='Option Location',
optstart char(8) label='Option Set',
group char(32) label='Option Group'
); 其对应的sashelp.VIEWS 的详细信息: sashelp.voption,如下所示:

使用PORC SQL 查表
使用其他procedure 或data 步 直接访问 sashelp 逻辑库下的相应SAS view。
推荐使用 PROC SQL 方式,因为 运行速度明显高于data步。
方法一:
data mytable;
set sashelp.vcolumn;
where libname='WORK' and memname='SALES';
run;
方法二:
proc sql;
create table mytable as
select * from sashelp.vcolumn
where libname='WORK' and memname='SALES';
quit;
//这两个程序 产生了同样的结果,但是运行速度,proc sql 要明显优于data步。 使用proc sql 访问 dictionary tables 的程序结构为:
specify DICTIONARY.table-name in the FROM clause in a SELECT statement in PROC SQL.

dictionary 是 系统自动创建的一个逻辑库,但仅限于 proc sql 使用。因为“dictionary”并不满足常规library的规定,如 小于8位长度等。
SASHELP.VOPTION select * from dictionary.OPTIONS
SASHELP.VGOPT select * from dictionary.GOPTIONS
SASHELP.VTITLE select * from dictionary.TITLES
SASHELP.VMACRO select * from dictionary.MACROS
SASHELP.VLIBNAM select * from dictionary.LIBNAMES
SASHELP.VENGINE select * from dictionary.ENGINES
SASHELP.VEXTFL select * from dictionary.EXTFILES
SASHELP.VMEMBER select * from dictionary.MEMBERS
SASHELP.VTABLE select * from dictionary.TABLES
SASHELP.VVIEW select * from dictionary.VIEWS
SASHELP.VCOLUMN select * from dictionary.COLUMNS
SASHELP.VDCTNRY select * from dictionary.DICTIONARIES
SASHELP.VINDEX select * from dictionary.INDEXES
SASHELP.VCATALG select * from dictionary.CATALOGS
SASHELP.VFORMAT select * from dictionary.FORMATS
SASHELP.VSTYLE select * from dictionary.STYLES
SASHELP.VCHKCON select * from dictionary.CHECK_CONSTRAINTS
SASHELP.VREFCON select * from dictionary.REFERENTIAL_CONSTRAINTS
SASHELP.VTABCON select * from dictionary.TABLE_CONSTRAINTS
SASHELP.VCNTABU select * from dictionary.CONSTRAINT_TABLE_USAGE
SASHELP.VCNCOLU select * from dictionary.CONSTRAINT_COLUMN_USAGE
SASHELP.VREMEMB select * from dictionary.REMEMBER


https://www.lexjansen.com/pharmasug/2014/HT/PharmaSUG-2014-HT04.pdf



DICTIONARY tables 常用于监视和管理 SAS sessions。
DICTIONARY tables are read-only objects, 所以只能对其查询,而不能进行增、删、改操作。
DICTIONARY.Tables 对应 Sashelp.Vtable
这个表单包含了所有的数据集(dataset)的信息。
例(1):
查询 逻辑库名为 ‘SQL’的所有的 tables and views 。
libname sql 'E:\SAS\sasdata';
data sql.test1;
set sashelp.cars;
run;
data sql test2;
set sashelp.air;
run;
proc sql;
title 'All Tables and Views in the SQL Library';
select libname, memname, memtype, nobs
from dictionary.tables
where libname='SQL'; 结果为:

例(2):
https://support.sas.com/resources/papers/proceedings/proceedings/sugi30/070-30.pdf
options nolabel;
data test;
set sashelp.cars;
run;
data test1;
set sashelp.cars;
run;
PROC SQL;
SELECT *
FROM DICTIONARY.TABLES
WHERE UPCASE(LIBNAME)="WORK";
QUIT;

包含所有数据集的所有变量的信息。
例(1):
展示数据集test1 的所有变量的详细信息。
libname sql 'E:\SAS\sasdata';
data sql.test1;
set sashelp.cars;
run;
data sql.test2;
set sashelp.air;
run;
proc sql;
select *
from dictionary.columns
where libname='SQL' and memname = 'TEST1';
quit; 结果:

例(2):
提取: work 逻辑库下的所有数据集中,变量为“MAKE”的 变量的信息。
options nolabel;
data test;
set sashelp.cars;
run;
data test1;
set sashelp.cars;
run;
PROC SQL;
SELECT *
FROM DICTIONARY.COLUMNS
WHERE UPCASE(LIBNAME)="WORK" and UPCASE(NAME)="MAKE";
QUIT;

Dictionary Tables 之间的关系
https://www.lexjansen.com/nesug/nesug08/bb/bb01.pdf

The SAS System read-only dictionary tables provide valuable information about SAS libraries, data sets, catalogs, indexes, macros, system options, titles, and views available.