SAS Dictionary Tables
想摄影不想学摄影
2022年07月28日 14:01
收录于文集
共44篇

一. 基础概念

SAS系统会将 SAS  libraries, data sets (tables), catalogs, indexes, macros, system options, titles, views 等的元数据(metadata)收集到一类叫做  dictionary tables 的表单中。

Dictionary tables 提供当前SAS运行环境的 系统相关信息。

可以理解为: dictionary tables 提供了SAS 相关的元数据(Metadata)。

1. Dictionary Tables 定义

每个 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 等信息。

2. 查看所有Dictionary Tables

代码块
JavaScript
自动换行
复制代码
PROC SQL ;
	Select distinct memname
		from dictionary.dictionaries;
QUIT;
复制成功

结果,输出如下 所有的 Dictionary Tables:

代码块
JavaScript
自动换行
复制代码
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 
复制成功

3.  查看 某个 DICTIONARY Table Definitions 的定义。

    例如:查看 dictionary.options

代码块
JavaScript
自动换行
复制代码
PROC SQL;
 DESCRIBE TABLE
 DICTIONARY.OPTIONS;
QUIT;
复制成功

在log中会显示:

代码块
JavaScript
自动换行
复制代码
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,如下所示:

4. 存取Dictionary 的方式有两种:

  1. 使用PORC SQL  查表

  2. 使用其他procedure 或data 步 直接访问 sashelp 逻辑库下的相应SAS view。

推荐使用 PROC SQL 方式,因为 运行速度明显高于data步。

代码块
JavaScript
自动换行
复制代码
方法一:

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位长度等。

代码块
JavaScript
自动换行
复制代码
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
复制成功

提取Dictionary Tables 中的子集:

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

5. Dictionary Tables 和 对应的 Sashelp Views:

6. DICTIONARY tables  特点:

  1.  DICTIONARY tables 常用于监视和管理 SAS sessions。

  2.  DICTIONARY tables are read-only objects, 所以只能对其查询,而不能进行增、删、改操作。

 DICTIONARY.Tables 对应 Sashelp.Vtable

二. 列举:

1. DICTIONARY.Tables

这个表单包含了所有的数据集(dataset)的信息。

例(1):

查询 逻辑库名为 ‘SQL’的所有的 tables and views 。

代码块
JavaScript
自动换行
复制代码
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

代码块
JavaScript
自动换行
复制代码
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;
复制成功

2. DICTIONARY.Columns

包含所有数据集的所有变量的信息。

例(1):

展示数据集test1 的所有变量的详细信息。

代码块
JavaScript
自动换行
复制代码
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):

代码块
JavaScript
自动换行
复制代码
提取:  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.