最近同事請我幫忙做合併檔案,在匯入Excel 2010的檔案時,用到了一個小技巧,分享給大家。

  Excel是臨床醫師收案時常會使用的資料檔案類型,也常常是醫師們從Microsoft Office Access資料庫中選擇匯出的形式。正確的將外部檔案匯入SAS是資料整理及後續分析關鍵的第一步。此時無論是欄位格式錯誤,或是欄位數、資料筆數錯誤,都將是慘絕人寰的事件,不僅會造成後續分析的障礙,也可能會導致garbagein then garbage out

  匯入Excel檔案重要的第一步驟,除了檢查欄位名稱長度、格式設定之外,極為重要卻常常被忽略的步驟是【檢查筆數跟欄位數】(這樣才能對照匯入後的SAS檔是否有問題)。此次範例的Excel檔,筆數為509筆,欄位數為362欄。

首先,先以一般SAS程式中,下拉選單的資料匯入方式示範,輸出的程式碼如下所示。

 

1.jpg

 

                 資料匯入後的log訊息顯示【NOTE: 資料集 WORK.EX 509 個觀測值和 255 個變數】。注意到了嗎?變數(欄位)的數目變少了!而且log視窗沒有顯示任何警告或是錯誤訊息。如果第一步驟中沒有正確掌握資料筆數跟欄位數的人,可能就很難發現這個問題了。

 

111.jpg

 

  SAS匯入Excel檔案時,下拉選單的匯入方式,會自動採用預設的【DBMS=EXCEL】方式匯入。此種匯入方式會因為舊版Excel檔案的欄位長度設定及欄位數上限原因,導致最多只能匯入255個欄位數。要將362個欄位完整匯入,必須改用新版Excel的方式,即【DBMS=XLSX】。但是如果import指令只改辨識匯入檔案類型的地方,log會出現【ERROR 180-322: Statement is not valid or it is used out of proper order.】的錯誤訊息。這是因為XLSXSyntaxEXCEL有些許差異,XLSX中部分功能未支援,XLSX有支援的功能,Syntax寫法也跟EXCEL不同,指令改寫範例如下所示:

 

2.jpg

 

                 眼尖的讀者們應該能發現,XLSX選擇讀取工作表的SyntaxSHEET,而且相較於DBMS=EXCEL時,少了很多Syntax,例如:MIXED=SCANTEXT=USEDATE=SCANTIME=DBMS=XLSX匯入資料檔的背景操作方式,其實跟DBMS=EXCEL很不一樣(牽涉到PC Files的問題,此處略過),DBMS=XLSX並未支援MIXEDSyntax

               進一步詳細XLSX支援的Syntax及預設值可參考SAS官方網站(http://support.sas.com/documentation/cdl/en/acpcref/69731/HTML/default/viewer.htm#n0msy4hy1so0ren1acm90iijxn8j.htm#p09degjribu2smn1eaqt5eq9on58)

  最後非常非常重要的小提醒,此次介紹的匯入小技巧,僅SAS 9.4能支援使用,而且【非常講究】版本問題。除了EXCEL檔案的副檔名必須為【.xlsx】之外,SAS 9.4安裝的位元版本也必須與office一致才行,例如:32位元的SAS必須搭配32位元的officeSAS位元版本跟office不一致,或者使用的SAS不是9.4,都將會導致滿江紅的各種ERROR喔。

 

關鍵字:SAS, procimport, excel, DBMS, XLSX

arrow
arrow
    全站熱搜

    晨晰部落格新站 發表在 痞客邦 留言(0) 人氣()