SAS魔法师的字典表格-经管之家官网!

人大经济论坛-经管之家 收藏本站
您当前的位置> 软件培训>>

SAS软件培训

>>

SAS魔法师的字典表格

SAS魔法师的字典表格

发布:davil2000 | 分类:SAS软件培训

关于本站

人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!

经管之家新媒体交易平台

提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

提供微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

https://pic.bbs.jg.com.cn/album/201211/28/095506000pe9eh298kv9zz.jpg通常情况下,SAS程序员会遇到某个SAS数据集中大量变量需要识别、重命名、排序、删除,或者某个SAS逻辑库中大量数据集需要识别、复制、改名、删 ...
免费学术公开课,扫码加入


https://pic.bbs.jg.com.cn/album/201211/28/095506000pe9eh298kv9zz.jpg


通常情况下,SAS程序员会遇到某个SAS数据集中大量变量需要识别、重命名、排序、删除,或者某个SAS逻辑库中大量数据集需要识别、复制、改名、删除的情况。如果这些变量名或者数据集不是按照计数顺序排列的,那么将这些名称编写进入程序将是一项极为繁琐的任务。然而,借助于只读属性的SAS字典,程序员则能够如同魔法师那样高效处理这类编程任务。 本文将展示,如何使用SQL过程来读取SAS字典信息,产生宏代码来执行后续编程任务。
SAS字典有某类型表格组成。这些表格是属性只读的数据视图,内容为当前SAS任务全部可得数据的元数据。它们包含了SAS逻辑库、数据集、宏、外部文件、检索的相关信息,可以利用来提高编程工作的效率。SAS v9.3字典包括了三十个表格,可以直接引用这些表格,或者从SASHELP逻辑库中间接引用。下面将讨论如何以SQL过程来获得字典表信息。
借助于SQL过程的SELECT语句,SAS程序员可以获得元数据------识别30个SAS字典表格并且获取其中的数据单元。字典表格的结构信息可以直接观察到,这些信息也可以生成一个数据集。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 dictionarymembers as
select memname from dictionary.members;
select * 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;
以上代码中除了以DESCRIBE TABLE语句显示字典表结构外,SELECT语句还使得SASUSER逻辑库里全部数据集的文件名在OUTPUT窗口列示。那么,如何在编程中利用这些文件名?
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中,变量名之间用空格分隔。
SELECT ... INTO : ... SEPARATED BY ......
proc sql;
select name into :varname separated by ' ' from DICTIONARY.COLUMNS
where libname = "SASHELP" and memname = "CARS";
%put &varname;
quit;
【例1.2】将数据集SASHELP.CARS的以"m"为首字符的变量名存入宏变量VARNAME中,变量名之间用空格分隔。然后,利用该宏变量进行数据集相关操作。
proc sql;
select name into :varname separated by ' ' from DICTIONARY.COLUMNS
where libname = "SASHELP" and memname = "CARS"
and substr(strip(name),1,2) like "M%" ;
data data1;
set SASHELP.CARS(drop=&varname);
run;
/*strip函数用来去除字符串前后空格*/
/*substr(string,1,2)函数表示从字符串位置1开始读取2个字符*/
【例1.3】首先,将数据集SASHELP.CARS中带有FORMAT的变量找出。然后,将这些变量的名称存入宏变量VARNAME,名称和格式的联合字符串存入宏变量VARFMT。
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 ^= ' ';
quit;
%put ***VARNAME: &varname ***VARFMT: &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 noprint;
select strip(put(nobs,8.)), strip(put(nvar,8.))
into :nobs, :nvar
from DICTIONARY.TABLES
where libname = "SASHELP"
and memname = "CARS";
quit;
%put ***nobs: &nobs ***nvar: &nvar;
【例2.2】将逻辑库SASUSER中在2011年后创建的数据集名称存入宏变量VALDATA中。
proc sql;
describe table dictionary.tables;
select MEMNAME
into :valdata separated by ' '
from DICTIONARY.TABLES
where libname = "SASUSER" and memtype="DATA"
and year(datepart(CRDATE)) gt 2011;
quit;
%put &valdata;
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 = upcase("sasuser") and memtype=upcase("data");
quit;
【例3.2】将某物理路径下全部SAS数据文件转换为,包含数据集观测值部分的.csv文件以及数据集描述部分的.txt文件。
%let dir=D:\Documents\test;
/**---------the codes below needn't be changed--------*;*/
options nofmterr nonotes;
libname mydb "&dir";
x "cd &dir";
%let library = mydb;
proc sql;
create table t_dta as
select memname, memtype
from dictionary.members
where libname=upcase("&library") and memtype="DATA";
quit;
data _null_; set t_dta end=last;
if last then call symput('nobs',trim(_n_));
run;
%macro transfer(nobs);
%let number=1;
%do %while(&number le &nobs);
proc printto new log='log.log' print='output.log'; run;
data _null_; set t_dta;
if _n_=&number then call symput('dsname',trim(memname));
run;
ods select Contents.DataSet.Variables;
ods output Contents.DataSet.Variables=&dsname._desc(drop=Member Num);
proc contents data=&LIBRARY..&dsname; run;
ods output Close;
proc sort; by pos; run;
data &dsname._vars; format num 5.;
set ; num=_n_; drop pos;
run;
proc export data=&LIBRARY..&dsname
outfile="&dsname..csv" dbms=csv replace; run;
proc export data=&dsname._vars outfile="&dsname._vars.txt"
dbms=csv replace; run;
proc datasets lib=work nolist;
delete &dsname:;
run;
quit;
%let number=%eval(&number+1);
%end;
%mend transfer;
%transfer(&nobs);
proc printto;
run;
在SAS环境中,字典表格的运用使得程序员成为编程能力超强的魔法师。借助于SAS宏语句和SQL过程语句,人们能够从字典表格中能够获得极富价值的元数据信息。本文仅对SAS字典表格作了简单介绍,从字典表格里还能够发掘更多的财富信息。希望SAS程序员和爱好者能够深入研究SAS字典表格,从而促进编程效率的显著提高。
「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
本文关键词:

本文论坛网址:https://bbs.pinggu.org/thread-2143950-1-1.html

人气文章

1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
经管之家 人大经济论坛 大学 专业 手机版