2014年3月24日 星期一

SAS 9.3 64位元與 Win 7 64位元,無法讀取匯入 Excel(xls, xlsx)或 Access (mdb, accdb)


問題描述:
作業系統環境是 Win7 64 與 SAS 9.3 64位元,Office 為 2003 版的,使用以下方式讀取或匯出 Excel 或Access的檔案
  • Import Wizard
  • Proc import 或Proc export
    • PROC IMPORT DBMS=EXCEL 
                  DATAFILE= "\directory\filename.xls" 
                 OUT= WORK.cdc REPLACE;
           SHEET="Sheet1";
           GETNAMES=YES;
           MIXED=NO;
           SCANTEXT=YES;
           USEDATE=YES;
           SCANTIME=YES;
      RUN;
  • Libname
    • libname myref  "\directory\filename.xls";
會失敗,而Log檔訊息為
ERROR: Connect: 類別未登錄
ERROR: Error in the LIBNAME statement.
ERROR: Error trying to establish connection: Unable to create Data Source.: Class not registered
ERROR: Error in the LIBNAME statement.
此狀況常見於剛換系統,以前寫的sas碼都變得無法執行。

解決方式:
  • 換回 SAS 9.3 的 32位版,但工程較大 ,但也一樣要安裝SAS PC Files Server
  • 使用SAS PC 檔案伺服器(SAS PC Files Server)來讀取檔案,建議SAS 64位元用戶一定要裝。
  1. 安裝方式請參考 SAS® 9.3 FOUNDATION for Windows 安裝導引
  2. 安裝過程中,一定要選擇讓 SAS PC Files Server隨windosw 自行啟動,否則後續每次叫檔案要自行到「所有程式」手動啟動
  3. 讀檔或匯出檔案的程式碼要稍微改如下
  4. libname myref pcfiles server="localhost" 
    port=9621
    path="\directory\filename.xls";
    proc import dbms=excelcs
          datafile='\directory\filename.xls' 
          out=sas-data-output-filename replace;
       sheet='sheet-name';
       server="localhost";
       port=9621 ;
    run;
    如此,只要更動少部分的程式即可!
      如果有進一步問題,可參考:http://support.sas.com/kb/33/228.html
    或是 http://support.sas.com/kb/43/802.html