99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀如何在SAS EG中展示DB2表的中文列標(biāo)識
如何在SAS EG中展示DB2表的中文列標(biāo)識
2017-03-30
收藏

如何在SAS EG中展示DB2表的中文列標(biāo)識

SAS EG中展示DB2表的中文列標(biāo)識

SAS用戶經(jīng)常會使用SAS Enterprise Guide (簡稱EG),通過SAS/ ACCESS to DB2 查看、獲取DB2中的表。

各種系統(tǒng)的開發(fā)人員經(jīng)常使用神一樣的字段來定義列名,而業(yè)務(wù)分析人員希望看到簡單明白直觀的中文列名。比如下面兩張圖對比一下,NAME和SALARY這兩個單詞很容易理解。但是如果使用了一些縮寫,比如CUSTID, CUSTNAME 或 CUSTSALA就很難理解了。

我們可以使用DB2中的comment,在EG中展示列的中文標(biāo)識。

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

解決思路

開發(fā)一個SAS程序(db2_add_comment.sas),該程序可以為DB2中的表添加comment信息,同時將表部分抽取到work邏輯庫下,方便SAS用戶對數(shù)據(jù)進行進一步分析。

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

1.抽取DB2中的表以及包含表字段comment數(shù)據(jù)的字典表sysibm.syscolumns到work邏輯庫下。

2. 對字典表當(dāng)中的列名、comment 以及列的個數(shù)參數(shù)化,生成一系列宏變量。

3.對SAS數(shù)據(jù)集添加label信息。

SAS宏自動化編譯

最終完整的SAS程序是一個可以直接被調(diào)用的SAS宏。

1. 為了方便用戶使用這段宏,將該SAS腳本上傳到SAS 計算層所在的環(huán)境中,如:/local/install/cfgsas1/sas_code/

2. 修改文件appserver_autoexec_usermods.sas (該文件一般在配置目錄下,如 /install/cfgsas1/config/Lev1/SASApp),%include該SAS腳本,這樣每次打開EG的時候就會自動對宏進行編譯。

3.打開EG之后直接調(diào)用該宏。

比如用戶希望查看DB2當(dāng)中的EMP2這張表。那么可以運行下面的調(diào)用語句:

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

其中database為db2數(shù)據(jù)庫的名稱,user/password分別為能夠讀取EMP2這張表的用戶名和密碼,table為DB2中表的名稱,obs_num為希望將DB2中該表的前多少行數(shù)據(jù)抽取出來,默認(rèn)為10行。

執(zhí)行成功后,會在work邏輯庫下生成一個同名的SAS數(shù)據(jù)集EMP2,為了能夠通過EG打開SAS數(shù)據(jù)集的時候看到label而不是變量名,可以在EG的選項中做一個設(shè)定:

這時在EG中打開該數(shù)據(jù)集,即可以看到comment信息得以展示:

完整 SAS 程序

如果有需要,可以回復(fù)關(guān)鍵字【源代碼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;數(shù)據(jù)分析師培訓(xùn)

%end;

quit;

%mend;

%modify_data

%mend;

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }