访问数据字典方法如下:
1.直接用SQL语句访问Dictionary table
2.访问SAShelp View
表名 |
包含信息 |
视图名 |
DICTIONARY.CATALOGS |
SAS目录册及所包含的条目 |
SASHELP.VCATALG |
DICTIONARY.COLUMNS |
列(或变量)及其特征 |
SASHELP.VCOLUMN |
DICTIONARY.DICTIONARIES |
所有表词典 |
SASHELP.VDCTNRY |
DICTIONARY.EXTFILES |
文件标识名和外部文件物理存储地址 |
SASHELP.VEXTFL |
DICTIONARY.INDEXES |
SAS数据集索引 |
SASHELP.VINDEX |
DICTIONARY.MEMBERS |
SAS数据集 |
SASHELP.VMEMBER |
DICTIONARY.OPTIONS |
目前设定的SAS系统选项 |
SASHELP.VOPTION |
DICTIONARY.STYLES |
ODS类型 |
SASHELP.VSTYLE |
DICTIONARY.TABLES |
SAS数据文件和视图 |
SASHELP.VTABLE |
DICTIONARY.VIEWS |
SAS数据视图 |
SASHELP.VVIEW |
打开explorer window,在SASHELP这个library下,以V开头的视图实际上是Dictionary table内容的复制。如
proc sql;describe view sashelp.voption;quit;
可以看到voption这个视图的内容来自dictionary.options。
而对于View,除了SQL,直接用data步或proc步都可以访问。如
data test2;
set sashelp.vcolumn;
where libname="WORK" and memname="TEST";
run;
或者
proc contents data=sashelp.voption;
run;
或者在command栏输入viewtable sashelp.voption。
Dictionary table的最常见的几个应用:
一、取出数据集的变量数和观测数
proc sql;
select nobs,nvar
into:nobs,:nvar
from dictionary.tables
where libname="WORK" and memname="TEST";
quit;
二、取出某一数据集的所有变量名
proc sql;
select name into :varlist
separated by " "
from dictionary.columns
where libname="WORK" and memname="TEST";
quit;
%put &varlist.;
三、取出某个library下所有数据集名
proc sql;
select memname into :dsname
separated by " "
from dictionary.tables
where libname="WORK";
quit;
四、取出所有的宏变量名
proc sql noprint;
create table macv as
select name
from dictionary.macros
where offset=0 and scope="GLOBAL";
quit;
效果同 %put _global_;