電子表格不是數據庫。可是,咱們中的許多人使用電子表格就好像它們是數據庫同樣,而後當電子表格佈局不支持數據庫樣式嚴格的可預測行,列和變量類型時,咱們就會掙扎 - 這是分析和報告所需的基本元素。若是您使用SAS從Microsoft Excel讀取數據,當您須要的數據不是從單元格A1開始時,您能夠作什麼?數據庫
經過設計,SAS能夠從電子表格中的任何單元格範圍讀取數據。在本文中,我將介紹如何在PROC IMPORT中使用RANGE語句來獲取所需的數據。服務器
對於SAS 9.4及更高版本,SAS建議使用DBMS = XLSX以得到最大的靈活性。它適用於全部操做系統,無需其餘組件,如PC文件服務器。您的Excel文件必須採用Excel 2007或更高版本格式(XLSX)。你這樣作須要SAS / ACCESS到PC文件的許可證。(剛剛學習?這些DBMS = XLSX技術也適用於SAS大學版。)佈局
若是您的Excel數據不是從單元格A1(導入過程的默認起點)開始,那麼您能夠添加包含特定單元格的RANGE =值。最簡單的方法是在Excel中使用命名範圍來定義數據的確切邊界。學習
要在Excel中定義命名範圍,請突出顯示要包括的單元格範圍,而後只需在「名稱框」中鍵入範圍的新名稱:ui
而後保存Excel文件。編碼
而後要導入SAS,請在RANGE =選項中指定範圍名稱:spa
proc importdatafile="/myprojects/myfile.xlsx"out=mydatareplace;range="myspecialrange";run;
若是您不提早知道範圍怎麼辦?您可使用PROC IMPORT讀取整個工做表,但結果將不包含所需的列標題和類型。考慮這樣一張表:操作系統
這段代碼會讀它:設計
proc importdatafile="/myprojects/middle.xlsx"out=mid dbms=xlsxreplace;run;
但結果將包含許多空單元格,而且值將做爲全部字符類型讀取:code
經過附加編碼,您可使用DATA步驟將此結果「修復」到另外一個傳遞中。或者,若是您願意爲特定單元格區域添加帶有Excel表示法的RANGE選項,則能夠在第一遍中正確閱讀:
proc importdatafile="/myprojects/middle.xlsx"out=mid dbms=xlsxreplace;range="Sheet1$E7:K17";run;
您還可使用LIBNAME XLSX從Excel中讀取整個工做表,或者只是做爲發現步驟在運行PROC IMPORT以前查看Excel文件包含的工做表。可是,LIBNAME XLSX不顯示Excel命名範圍。
在SAS for Windows系統上,您可使用LIBNAME EXCEL(32位)或LIBNAME PCFILES(64位)來顯示有關Excel文件的更多信息。
libnamed pcfiles path="c:\myprojects\middle.xlsx";proc datasetslib=d;quit;/* always clear the libname, as it locks the file */libnamed clear;
請注意,DBMS = XLSX不支持咱們在舊版DBMS = XLS(僅支持舊格式XLS文件)中看到的一些選項,例如STARTROW和NAMEROW。DBMS = XLSX支持GETNAMES(將工做表或範圍的第一個記錄視爲變量名稱)。