数据字典中常用信息检索:
| DICTIONARY. MEMBERS 包含了逻辑库名称、数据文件类型(数据集、视图或者目录)、路径等信息
| dbms_memtype char(32) label='DBMS Member Type', engine char(8) label='Engine Name', index char(3) label='Indexes', path char(1024) label='Pathname'
|
DICTIONARY. TABLES 包含了诸如逻辑库名、数据文件的类型、创建日期、观测值数、变量数等信息
| crdate num format=DATETIME informat=DATETIME label='Date Created', 可以根据数据集的创建时间来控制 modate num format=DATETIME informat=DATETIME label='Date Modified', 可以根据数据集的修改时间来控制 nobs num label='Number of Physical Observations', obslen num label='Observation Length', nvar num label='Number of Variables', delobs num label='Number of Deleted Observations', nlobs num label='Number of Logical Observations', maxvar num label='Longest variable name', maxlabel num label='Longest label', num_character num label='Number of Character Variables', num_numeric num label='Number of Numeric Variables'
|
DICTIONARY. COLUMNS 诸如变量的名称、类型、长度和标签等信息 | name char(32) label='Column Name', type char(4) label='Column Type', length num label='Column Length', npos num label='Column Position', varnum num label='Column Number in Table', label char(256) label='Column Label', format char(49) label='Column Format', informat char(49) label='Column Informat', |
共同部分 | libname char(8) label='Library Name', memname char(32) label='Member Name', memtype char(8) label='Member Type',
|
- /*SQL过程能够返还全部字典表的名称以及各表格的信息,或者仅显示表的信息*/
- proc sql;
- title "All the tables's information from the dictionary libref";
- select * from dictionary.dictionaries;
- title "Only the tables's name from the dictionary libref";
- select unique memname from dictionary.dictionaries;
- quit;
- /*特定字典表的内容也能够使用SQL语句查询,并且可以将查询结果使用 CREATE TABLE 语句产生一个数据集。*/
- /*比如,通过以上代码将"dictionaries"替换为"members",可以查询全部逻辑库的对象信息。*/
- proc sql;
- title "Slect memnames from the specific dictionary table";
- create table dictionarytables as
- select distinct memname from dictionary.members;
- quit;
- /*此外,SQL过程的DESCRIBE TABLE语句能够用来查看字典表的结构,并将结果输出到LOG窗口。*/
- proc sql;
- describe table dictionary.members;
- title "All data sets from a specific library";
- select memname from dictionary.members
- where libname=upcase("sasuser") and memtype=upcase("data");
- quit;
- /*--------------------------------------------------------------------------------
- SAS字典表格的魔力在于能够用来操控SQL过程。
- 借助于该过程的查询语句SELECT......INTO: ......SEPARATED BY...FROM......WHERE......,
- SAS字典表的信息能被读取并且写入某宏变量之中。
- 例如,这段代码将SASUSER逻辑库里全部数据集的文件名写入了宏变量DSNAME之中:--------*/
- proc sql;
- select memname into: dsname separated by ' '
- from dictionary.members
- where libname=upcase("sasuser") and memtype=upcase("data");
- %put &dsname;
- quit;
- /*-----------------------------------------------------------------------------
- 以下部分涉及DICTIONARY.COLUMNS、DICTIONARY.TABLES以及DICTIONARY.MEMBERS等字典表的内容。
- 我们将探索在编程实践中,如何以SAS字典表来提高效率。
- 【DICTIONARY.COLUMNS】
- 对于当前SAS任务的全部数据集,表格DICTIONARY.COLUMNS包含了诸如变量的名称、类型、长度和标签等信息。
- 表格视图中每一变量的属性都可以使用DESCRIBE语句来识别。
- -----------------------------------------------------------------------------*/
- proc sql;
- describe table dictionary.columns;
- quit;
- /*【例1.1】将数据集SASHELP.CARS的全部变量名存入宏变量VARNAME中,变量名之间用空格分隔。*/
- proc sql;
- select name into :varname separated by ' '
- from dictionary.columns
- where libname=upcase("SASHELP") and memname=upcase("CARS");
- %put &varname;
- quit;
- /*【例1.2】将数据集SASHELP.CARS的以"m"为首字符的变量名存入宏变量VARNAME中,-----------
- 变量名之间用空格分隔。然后,利用该宏变量进行数据集相关操作。-------------------------*/
- proc sql;
- select name into :varname separated by ' '
- from dictionary.columns
- where libname=upcase("SASHELP") and memname=upcase("CARS")
- and substr(strip(name),1,2) like "M%";
- /*strip函数用来去除字符串前后空格*/
- /*substr(string,1,2)函数表示从字符串位置1开始读取2个字符*/
- %put &varname;
- quit;
- /*【例1.3】---------------------------------------------------------------------------
- 首先,将数据集SASHELP.CARS中带有FORMAT的变量找出。
- 然后,将这些变量的名称存入宏变量VARNAME,[名称和格式的联合字符]串存入宏变量VARFMT。-----*/
- /*PS:通过此程序,可以实现批量格式转换。将表1的一部分格式复制到表2中。*/
- /*先提取表1中目标变量的格式,存储其变量名和格式,再将此格式宏变量运用在表2中*/
- proc sql;
- select strip(name),strip(name)||' '||format
- into : varname separated by ' ',: varfmt separated by ' '
- from dictionary.columns
- where libname="SASHELP" and memname="CARS" and format ne ' ' ;
- quit;
- %put &varname &varfmt;
- proc freq data=sashelp.cars;
- tables &varname./missing;
- format &varfmt;
- run;
- /*----【DICTIONARY.TABLES】--------------------------------------------------------------------------------------
- 字典表格DICTIONARY.TABLES包含了诸如逻辑库名、数据文件的类型、创建日期、观测值数、变量数等信息。
- 当前SAS任务的任一数据集的信息都包含在这个表格中。使用SQL过程的DESCRIBE语句,能够在LOG窗口中查看该字典表格的结构。----*/
- proc sql;
- describe table dictionary.tables;
- quit;
- /*【例2.1】将数据集SASHELP.CARS的观测值数和变量数分别存入两个宏变量中。*/
- proc sql;
- select strip(put(nvar,8.)),strip(put(nobs,8.)) into: nvar,:nobs
- from dictionary.tables
- where libname="SASHELP" and memname="CARS";
- quit;
- %put &nvar &nobs;
- /*【例2.2】将逻辑库SASUSER中在2011年后创建的数据集名称存入宏变量VALDATA中。------
- 根据数据集创建时间来选择数据路径------------------------------------------------*/
- proc sql;
- create table a as
- select memname into : valdata separated by ' '
- from dictionary.tables
- where libname="SASHELP" and memname="CARS"
- and year(datepart(crdate)) ge 2011;
- quit;
- /*【DICTIONARY.MEMBERS】------------------------------------------------------------
- 字典表格DICTIONARY.MEMBERS包含了逻辑库名称、数据文件类型(数据集、视图或者目录)、
- 路径等信息。使用SQL过程的DESCRIBE语句,能够在LOG窗口中查看该表格的结构。-----------*/
- proc sql;
- describe table dictionary.members;
- quit;
- /*【例3.1】将逻辑库SASUSER中数据集的名称和路径列示出来。*/
- proc sql;
- select strip(memname)||' '||strip(path)
- from dictionary.members
- where libname="SASUSER" and memtype="DATA" ;
- quit;



雷达卡




京公网安备 11010802022788号







