如何使用SAS从Excel中读取一系列单元格

电子表格不是数据库。但是,我们中的许多人使用电子表格就好像它们是数据库一样,然后当电子表格布局不支持数据库样式严格的可预测行,列和变量类型时,我们就会挣扎 – 这是分析和报告所需的基本元素。如果您使用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中定义命名范围,请突出显示要包括的单元格范围,然后只需在“名称框”中键入范围的新名称:

然后保存Excel文件。

然后要导入SAS,请在RANGE =选项中指定范围名称:

proc importdatafile="/myprojects/myfile.xlsx"out=mydatareplace;range="myspecialrange";run;

对单元格区域使用Excel表示 

如果您不提前知道范围怎么办?您可以使用PROC IMPORT读取整个工作表,但结果将不包含所需的列标题和类型。考虑这样一张表:

这段代码会读它:

proc importdatafile="/myprojects/middle.xlsx"out=mid dbms=xlsxreplace;run;

但结果将包含许多空单元格,并且值将作为所有字符类型读取:

通过附加编码,您可以使用DATA步骤将此结果“修复”到另一个传递中。或者,如果您愿意为特定单元格区域添加带有Excel表示法的RANGE选项,则可以在第一遍中正确阅读:

proc importdatafile="/myprojects/middle.xlsx"out=mid dbms=xlsxreplace;range="Sheet1$E7:K17";run;

如何“发现”Excel文件的结构

您还可以使用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(将工作表或范围的第一个记录视为变量名称)。

非常感谢您阅读本文,有任何问题请在下面留言!

点击这里给我发消息


 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds