登录
首页精彩阅读如何在SAS EG中展示DB2表的中文列标识
如何在SAS EG中展示DB2表的中文列标识
2017-03-30
收藏

如何在SAS EG中展示DB2表的中文列标识

SAS EG中展示DB2表的中文列标识

SAS用户经常会使用SAS Enterprise Guide (简称EG),通过SAS/ ACCESS to DB2 查看、获取DB2中的表。

各种系统的开发人员经常使用神一样的字段来定义列名,而业务分析人员希望看到简单明白直观的中文列名。比如下面两张图对比一下,NAME和SALARY这两个单词很容易理解。但是如果使用了一些缩写,比如CUSTID, CUSTNAME 或 CUSTSALA就很难理解了。

我们可以使用DB2中的comment,在EG中展示列的中文标识。

比如DB2中的表EMP2,有两列:name和salary。其中name的comment为“名字”,而salary的comment为“年薪”。

解决思路

开发一个SAS程序(db2_add_comment.sas),该程序可以为DB2中的表添加comment信息,同时将表部分抽取到work逻辑库下,方便SAS用户对数据进行进一步分析。

该SAS程序可以分成3部分:

1.抽取DB2中的表以及包含表字段comment数据的字典表sysibm.syscolumns到work逻辑库下。

2. 对字典表当中的列名、comment 以及列的个数参数化,生成一系列宏变量。

3.对SAS数据集添加label信息。

SAS宏自动化编译

最终完整的SAS程序是一个可以直接被调用的SAS宏。

1. 为了方便用户使用这段宏,将该SAS脚本上传到SAS 计算层所在的环境中,如:/local/install/cfgsas1/sas_code/

2. 修改文件appserver_autoexec_usermods.sas (该文件一般在配置目录下,如 /install/cfgsas1/config/Lev1/SASApp),%include该SAS脚本,这样每次打开EG的时候就会自动对宏进行编译。

3.打开EG之后直接调用该宏。

比如用户希望查看DB2当中的EMP2这张表。那么可以运行下面的调用语句:

%db2_add_comment(database = database_name, user = db_user, password = db_password, table = EMP2,obs_num = 10)

其中database为db2数据库的名称,user/password分别为能够读取EMP2这张表的用户名和密码,table为DB2中表的名称,obs_num为希望将DB2中该表的前多少行数据抽取出来,默认为10行。

执行成功后,会在work逻辑库下生成一个同名的SAS数据集EMP2,为了能够通过EG打开SAS数据集的时候看到label而不是变量名,可以在EG的选项中做一个设定:

这时在EG中打开该数据集,即可以看到comment信息得以展示:

完整 SAS 程序

如果有需要,可以回复关键字【源代码DB2】下载完整SAS程序。

%macro db2_add_comment(database = , /* db2 database name */

user = , /* db2 user name */

password = , /* db2 password */

table = , /* db2 table */

obs_num = 10 /* number of obs to be extracted in db2 table */

);

%let table_nm = %str(%"&table%");

proc sql;

connect to db2 (database=&database user=&user password=&password);

create table work.column_name as

select NAME,REMARKS

from connection to db2(select name, remarks from sysibm.syscolumns where tbname = &table_nm);

create table work.&table as

select * from connection to db2(select * from &table fetch first &obs_num rows only);

quit;

data _null_;

set work.column_name;

call symputx("column_lable"||strip(_n_),kstrip(remarks));

call symputx("column_name"||strip(_n_),strip(name));

call symputx("column_num",strip(_n_));

run;

%macro modify_data;

proc datasets library=work nolist;

modify &table;

%do i = 1 %to &column_num;

%if &&column_lable&i = %then %do;

label &&column_name&i = "&&column_name&i";

%end;

%else %do;

label &&column_name&i = "&&column_lable&i";

%end;数据分析师培训

%end;

quit;

%mend;

%modify_data

%mend;

数据分析咨询请扫描二维码

客服在线
立即咨询