我正在使用 SAS 和 Excel 进行演示,并且希望能够在 Base SAS 中运行一个脚本来导入我的屏幕上的Excel 数据。
这是否可以使用本机 SAS 例程或 DDE 作为最后的手段?我正在使用 Excel 2010 和 SAS 9.3。
您可以使用 FILELOCKS 选项。SAS 将忽略任何锁并照常进行。我一直将它与 PROC IMPORT 一起使用。
options filelocks = ("&workbookdir" NONE);
Base SAS alone cannot read from an Excel workbook. With the SAS Access to PC File Formats product (a separately licensed component), SAS can read from the most recently "saved" copy of the workbook:
proc import datafile='c:\temp\test4sas.xlsx'
out=test
replace;
run;
Note that SAS will not read directly from your Excel application, it reads from the workbook file itself. If you have "autosave" features turned on, the SAS dataset imported will contain whatever is currently "saved" in the workbook.
You might very well have SAS Access licensed on your site (most Windows sites have it as part of a bundle). To confirm, run this to see all the products licensed:
proc setinit;
run;
认为 DDE 是您最好的选择 - 以下代码应该可以解决问题(根据需要进行修改):
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 将是屏幕数据最明显的解决方案。我不是 DDE 专家,但鉴于 DDE 通过与当前正在运行的 Excel 进程交互来运行,它当然似乎是为您的结果量身定做的,尽管它有缺点并且即使没有被实际弃用也很有效。
另一个合理的解决方案是编写一个宏,将您的屏幕数据导出到 CSV,然后调用导入该 CSV 的 SAS 例程。您可以从 VBA 调用 SAS(与任何其他程序一样),因此它将集成到您的 Excel 工作簿中(如果这可以来自许多工作簿,请将宏放在您的个人工作簿中,或者如果您需要使用 .xlsm别人的电脑)。这大概就是我会做的。
最后,还有适用于 Excel 的 SAS 插件。 http://support.sas.com/documentation/onlinedoc/addin/index.html 我没有这方面的经验,但它可能会满足您的需求[取决于具体细节]。
我没有尽可能地密切关注,但似乎有一段时间它不允许我这样做,但现在它允许我使用 Proc Import 并在 Excel 中打开文件。然而,它还可以打开另一个版本的 Excel,电子表格以只读模式打开。我希望它不会那样做,这就是我看到这篇文章的方式。我不知道这是否重要,但我正在使用 PC 文件服务器引擎来读取工作表 (DBMS=EXCELCS)。
注意: http: //support.sas.com/kb/15/547.html说如果文件打开而不是关闭,SAS 会得到不同的结果。我有这样的经验,如果电子表格打开,列将被读取为与工作表关闭时的读取方式不同的类型。