在电子表格打开时将Excel数据导入SAS

在电子表格打开时将Excel数据导入SAS,excel,sas,Excel,Sas,我正在使用SAS和Excel进行演示,希望能够在基本SAS中运行脚本,导入屏幕上的Excel数据 这是否可能使用本机SAS例程或DDE作为最后手段?我正在使用Excel 2010和SAS 9.3 仅基本SAS无法从Excel工作簿中读取。SAS Access to PC File Formats产品是一个单独许可的组件,SAS可以从最近保存的工作簿副本中读取: proc import datafile='c:\temp\test4sas.xlsx' out=test repl

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


这是否可能使用本机SAS例程或DDE作为最后手段?我正在使用Excel 2010和SAS 9.3

仅基本SAS无法从Excel工作簿中读取。SAS Access to PC File Formats产品是一个单独许可的组件,SAS可以从最近保存的工作簿副本中读取:

proc import datafile='c:\temp\test4sas.xlsx'
     out=test
     replace;
run;
请注意,SAS不会直接从Excel应用程序读取,而是从工作簿文件本身读取。如果已启用自动保存功能,则导入的SAS数据集将包含当前保存在工作簿中的内容

您很可能在您的站点上获得SAS访问许可,大多数Windows站点都将其作为捆绑包的一部分。要确认,请运行此命令查看所有许可的产品:

proc setinit;
run;

无法仅从Excel工作簿读取基本SAS。SAS Access to PC File Formats产品是一个单独许可的组件,SAS可以从最近保存的工作簿副本中读取:

proc import datafile='c:\temp\test4sas.xlsx'
     out=test
     replace;
run;
请注意,SAS不会直接从Excel应用程序读取,而是从工作簿文件本身读取。如果已启用自动保存功能,则导入的SAS数据集将包含当前保存在工作簿中的内容

您很可能在您的站点上获得SAS访问许可,大多数Windows站点都将其作为捆绑包的一部分。要确认,请运行此命令查看所有许可的产品:

proc setinit;
run;

我认为DDE将是屏幕数据最明显的解决方案。我不是DDE专家,但考虑到DDE是通过与当前运行的Excel流程交互来运行的,因此它显然是为您的结果量身定做的,尽管它存在缺点,并且如果不是被实际弃用的话,也会非常有效

另一个合理的解决方案是编写一个宏,将屏幕上的数据导出到CSV,然后调用一个SAS例程导入该CSV。您可以像其他任何程序一样从VBA调用SAS,因此,如果可以从许多工作簿调用SAS,它将集成到您的Excel工作簿中,将宏放入您的个人工作簿中,或者如果您需要使用其他计算机,则带上.xlsm。这可能就是我要做的


最后,还有用于Excel的SAS加载项。我没有这方面的经验,但它可能会满足您的需要[取决于具体细节]。

我认为DDE将是屏幕数据最明显的解决方案。我不是DDE专家,但考虑到DDE是通过与当前运行的Excel流程交互来运行的,因此它显然是为您的结果量身定做的,尽管它存在缺点,并且如果不是被实际弃用的话,也会非常有效

另一个合理的解决方案是编写一个宏,将屏幕上的数据导出到CSV,然后调用一个SAS例程导入该CSV。您可以像其他任何程序一样从VBA调用SAS,因此,如果可以从许多工作簿调用SAS,它将集成到您的Excel工作簿中,将宏放入您的个人工作簿中,或者如果您需要使用其他计算机,则带上.xlsm。这可能就是我要做的


最后,还有用于Excel的SAS加载项。我没有这方面的经验,但它可能会满足您的需要[取决于具体的细节]。

认为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是您的最佳选择-以下代码应根据需要进行适当的修改:

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;

您可以使用FILELOCKS选项。SAS将忽略任何锁定,并照常进行。我一直在PROC IMPORT中使用它


选项filelocks=&workbookdir-NONE

您可以使用FILELOCKS选项。SAS将忽略任何锁定,并照常进行。我一直在PROC IMPORT中使用它


选项filelocks=&workbookdir-NONE

我没有尽可能地关注,但似乎有一段时间它不允许我这么做,但现在它确实允许我在Excel中打开文件时使用Proc Import。但是,它还可以打开另一个版本的Excel,并以只读模式打开电子表格。我希望它不会那样做,这就是我看到这篇文章的原因。我不知道这是否重要,但我正在使用PC文件服务器引擎读取工作表DBMS=EXCELCS


注意:表示如果文件处于打开状态而不是关闭状态,SAS可能会得到不同的结果。我曾经有过这样的经验,如果电子表格打开,一列将被视为与工作表关闭时不同的类型。

我没有尽可能地密切关注,但似乎有一段时间它不允许我这样做,但现在它允许我在Excel中打开文件时使用Proc Import。但是,它还可以打开另一个版本的Excel,并以只读模式打开电子表格。我希望它不会那样做,这就是我看到这篇文章的原因。我不知道这是否重要,但我正在使用PC文件 读取工作表DBMS=EXCELCS的服务器引擎


注意:表示如果文件处于打开状态而不是关闭状态,SAS可能会得到不同的结果。我有过这样的经验,如果电子表格打开,列的读取方式将与工作表关闭时的读取方式不同。

FYI:SAS Excel加载项是SAS Enterprise BI Server产品的一部分,其中还包括对PC文件格式的访问。换句话说,它不是基本SAS。我不知道有什么计划反对DDE。。但这并不是我所同意的最稳健的方法。出于演示目的,我认为实施起来很快/灵活。仅供参考:SAS Excel加载项是SAS Enterprise BI Server产品的一部分,它还包括对PC文件格式的访问。换句话说,它不是基本SAS。我不知道有什么计划反对DDE。。但这并不是我所同意的最稳健的方法。为了演示的目的,我认为这将是一个很好的快速/灵活的实现..这是否存在于Windows下?我只在Unix和Z/OS中看到了这方面的证据。我想这在excel中不起作用吧?不过答案很有趣。。以前从未听说过这个选项。我使用它的方式是:使用winders打开EXCEL工作簿。摆弄它,保存它,但让它打开。运行进程导入程序。。。如果使用默认文件锁定,则无法完成导入,因为excel已将其锁定。使用filelocks选项NONE时,读取工作正常,只要我记得保存,就可以了。在Windows中不工作-错误13-12:无法识别的SAS选项名称filelocks。Windows下是否存在这种情况?我只在Unix和Z/OS中看到了这方面的证据。我想这在excel中不起作用吧?不过答案很有趣。。以前从未听说过这个选项。我使用它的方式是:使用winders打开EXCEL工作簿。摆弄它,保存它,但让它打开。运行进程导入程序。。。如果使用默认文件锁定,则无法完成导入,因为excel已将其锁定。使用filelocks选项NONE时,读取工作正常,只要我记得保存,一切正常。在Windows中不工作-错误13-12:无法识别SAS选项名称filelocks。