导入Excel数据到SAS,同时电子表格仍然打开

我正在使用SAS和Excel进行演示,希望能够在Base SAS中运行脚本来导入屏幕上的 Excel数据。

这可能使用本地SAS例程,或DDE作为最后的手段? 我正在使用Excel 2010和SAS 9.3。

您可以使用FILELOCKS选项。 SAS将忽略任何locking并照常进行。 我一直用PROC IMPORT来使用它。

options filelocks =(“&workbookdir”NONE);

单独的Base SAS无法从Excel工作簿中读取。 通过SAS访问PC文件格式产品(一个单独授权的组件),SAS可以从最近“保存”的工作簿副本中读取:

proc import datafile='c:\temp\test4sas.xlsx' out=test replace; run; 

请注意,SAS不会直接从Excel应用程序中读取,而是从工作簿文件本身读取。 如果打开了“自动保存”function,则导入的SAS数据集将包含当前“保存”在工作簿中的任何内容。

您可能在您的站点上获得SAS Access许可(大多数Windows站点将其作为捆绑包的一部分)。 要确认,运行这个来查看所有授权的产品:

 proc setinit; run; 

认为DDE是你最好的select – 下面的代码应该做的伎俩(适当修改):

 filename xlSheet1 dde "Excel|C:\Location_of_excel_file\[demo.xlsx]Sheet1!R2C1:R40C2"; data mydataset; infile xlSheet1 dlm='09'x notab dsd missover; input var1:$15. var2:$15.; run; 

我认为DDE是屏幕数据最明显的解决scheme。 我不是DDE专家,但是鉴于DDE是通过与当前正在运行的Excel进程交互来运行的,所以它看起来似乎适合于您的结果,尽pipe它有缺陷,并且如果不被实际使用,效果也会很好。

另一个合理的解决scheme是编写一个macros,将您的屏幕上的数据导出到CSV,然后调用导入该CSV的SAS例程。 您可以从VBA调用SAS(与其他程序一样),因此它将被集成到Excel工作簿中(如果这可能来自许多工作簿,请将该macros放在您的个人工作簿中,或者如果需要使用,则需要带上.xlsm别人的电脑)。 这可能是我会做的。

最后是Excel的SAS加载项。 http://support.sas.com/documentation/onlinedoc/addin/index.html我没有经验,但它可能会做你所需要的%5B取决于具体细节是什么%5D。

我一直没有付出足够的关注,但似乎有一段时间它不让我这样做,但现在它允许我使用Proc Import在Excel中打开该文件。 但是,它也是打开Excel的另一个版本,并以只读模式打开电子表格。 我希望它不会这样做,这是我如何看待这个职位。 我不知道它是否重要,但我正在使用PC文件服务器引擎来读取工作表(DBMS = EXCELCS)。

注意: http : //support.sas.com/kb/15/547.html表示如果文件打开而不是closures,SAS可以得到不同的结果。 我有这样的经验,如果电子表格是打开的,一列会被视为一个不同的types,如果工作表closures,它将如何被读取。