电子表格不是数据库。可是,咱们中的许多人使用电子表格就好像它们是数据库同样,而后当电子表格布局不支持数据库样式严格的可预测行,列和变量类型时,咱们就会挣扎 - 这是分析和报告所需的基本元素。若是您使用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(将工做表或范围的第一个记录视为变量名称)。