[新知] SAS 9.2中使用Libname快速讀入多張sheets

這個月SAS台灣公司所出的SAS程式好好用主要在介紹Libname的小撇步

其實眼尖的讀者應該一下就發現,去年五月[SAS] 匯入Excel檔中也有提過類似功能

事實上這款撇步蠻好用的

學會如何使用後在資料處理上得以事半功倍

有興趣的可前往以下連結取得SAS台灣公司的原文

因為過去介紹過,就不再多作demo

經驗小提醒:

(1) 這個功能要得以使用,必須在你的SAS授權內有租借SAS/Access to PCFF

(2) 使用該Excel檔內多個sheets時,除非關閉SAS與該檔案的連結(地球符號),否則無法在其他地方使用該Excel檔案,因為被鎖定

(3) 在欲使用某張sheet時,注意程式中呼叫的語法,必須加上n,例如:

proc ttest data=MYDATA.’sheet1’n; /*注意此處data=後面的步數*/
       class group;
       var weight;
run;

上面這個簡單的例子意思就是在MYDATA這個excel檔案中,使用sheet1這個工作表

很簡單吧!

文章連結:SAS9.2_LIBNAME

文章來源:http://www.sas.com/offices/asiapacific/taiwan/images/2011/tech_support_201104.pdf



7 Responses to “[新知] SAS 9.2中使用Libname快速讀入多張sheets”

  1.   wallace Says:

    very good

  2.   Carl Says:

    THX!!

  3.   Carl Zhou Says:

    我發現Excel電子表格的問題還是很麻煩 用SAS創建的Excel文件 比如將 new1 數據集 寫入了Excel文件的一個spreadsheet中
    如下操作:
    libname xls EXCEL ‘c:\…\test.xls’;
    data a;
    label name=’姓名’;
    input name$;
    cards;
    小黃
    小張
    小劉
    ;
    data xls.new1(dblabel=yes);
    set a;
    run;
    libname xls clear;

    之後成功寫入一個Excel文件test.xls 該xls文件打開後包含一個spreadsheet
    該spreadsheet的名字為new1
    裏面A1是姓名 A2-A4對應小黃、小張和小劉

    然後我進行該Excel文件的讀取操作
    libname xls ‘c:\…\test.xls’;
    proc print data = xls.new;
    run;
    此時似乎不需要寫成 data = xls.’new1’n; 寫了反而會產生錯誤

    但是如果在Excel中對數據進行了操作(如添加了數據 修改了spreadsheet的名字等)
    則再用SAS讀取該xls文件時 無法讀取用Excel修改過的數據部分
    我用的是Excel2007 也許是Excel2007對xls(Excel97-2003文件)操作後導致SAS無法讀取Excel2007修改的文件(兼容問題也許是)

    如果xls文件裏spreadsheets的名稱是中文名的話 我嘗試使用
    options validvarname=any; 等都無法正確讀入
    比如 proc print data = xls.新 或者 proc print data = xls.’新’ 或者 proc print data = ‘新’n 均提示錯誤

    不知博主有沒有注意到這種狀況

    我只能怪怪的用proc import(從菜單導入)Excel文件

  4.   Carl Zhou Says:

    奇怪了

    proc print data = xls.’new$’n;
    就可以讀取用Excel 添加 過的數據了
    而用
    proc print data = xls.new;
    只可以讀取 修改 的數據 而添加的數據卻一個也讀取不了
    真神奇…
    完全不懂SAS這Excel文件讀取的原理

  5.   Carl Zhou Says:

    我在3樓後半部分的表述有問題…忽略掉他

    總結一下

    按博主的例子

    proc ttest data=MYDATA.’sheet1′n; /*注意此處data=後面的步數*/
    class group;
    var weight;
    run;

    這裡 proc ttest data=MYDATA.’sheet1′n; 最好修改成 proc ttest data=MYDATA.’sheet1$′n; 加上一個$

    還有就是 SAS創建的 Excel文件(內含電子錶格new比如) 能直接用 data = xls.new 這種形式讀取
    而 Excel創建或修改的Excel文件(內含電子錶格new比如)必須用 data = xls.’new$’n 這種形式讀取

    很詭異哦“`

  6.   Shrimp Li Says:

    感謝Carl Zhou熱心的整理與分享, 讓大家知道有更多細節要注意.

    sas本身自己創出來的檔案, 因為格式統一, 所以讀取的方式比較簡單, 如上面所說的直接讀取
    然而excel所建立出來的xls檔, 讀取就比較囉唆麻煩, 也很容易出問題, 很難發現匯入的資料是否有缺漏
    因為xls內的檔案格式不容易統一, 所以即便成功讀入到sas內, 還是可能資料呈現不如預期

    因此, 還是比較建議使用csv檔案匯入sas, 單純的逗點分隔檔比起xls檔, 較不容易有問題~

    話說目前9.2還沒有很普及(應該),大部分學生仍舊使用9.1的版本, 因此大量匯入xls檔, 仍然要非常小心.

  7.   Carl Zhou Says:

    嗯 感覺Excel電子錶格的確不適合SAS直接使用


total of 2441055 visits