2013-03-15 72 views

回答

2

僅基本SAS無法從Excel工作簿讀取。隨着SAS進入PC文件格式的產品(單獨授權的組件),SAS可以從工作簿中的最近「保存」副本讀:

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

注意,SAS將不會從您的Excel應用程序直接讀取,它從工作簿文件本身讀取。如果打開了「自動保存」功能,則導入的SAS數據集將包含當前「保存」在工作簿中的任何內容。

您可能在您的站點上獲得了許可的SAS Access(大多數Windows站點都將其作爲捆綁包的一部分)。爲了確認,運行此看到所有授權產品:

proc setinit; 
run; 
0

我覺得DDE將是最明顯的解決方案這裏屏幕上數據。我不是DDE專家,但考慮到DDE通過與當前運行的Excel進程交互操作,它看起來似乎適合您的結果,儘管它存在缺陷,並且如果不被實際使用,效果會很好。

另一個合理的解決方案是編寫一個宏,將您的屏幕上的數據導出到CSV,然後調用導入該CSV的SAS例程。您可以從VBA調用SAS(與任何其他程序一樣),以便將其集成到Excel工作簿中(如果這可能來自許多工作簿,請將宏放入您的個人工作簿中,或者在需要使用時帶上.xlsm別人的電腦)。這可能是我會做的。

最後,還有用於Excel的SAS加載項。 http://support.sas.com/documentation/onlinedoc/addin/index.html我沒有經驗,但它可能會做你所需要的[根據具體細節而定]。

+0

僅供參考:適用於Excel的SAS加載項是SAS Enterprise BI Server產品的一部分(其中還包括對PC文件格式的訪問)。換句話說,它不是「Base SAS」。 – BellevueBob 2013-03-15 23:03:04

+0

有沒有計劃(我知道)貶低DDE ..但它不是我最贊同的方法。爲了演示的目的,我認爲這將是很好的,因爲快速/靈活的實施.. – 2013-03-21 21:31:23

1

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; 
3

可以使用FILELOCKS選項。 SAS將忽略任何鎖定並照常進行。我一直使用它與PROC IMPORT。

options filelocks =(「& workbookdir」NONE);

+0

這是否存在Windows下?我只能在Unix和Z/OS上看到它的證據。 – Joe 2013-03-22 16:48:41

+0

我不知道。我只有EG和UNIX了。沒關係。 – 2013-03-22 19:10:04

+0

我想這不適用於Excel呢?雖然有趣的答案..以前沒有聽說過這個選項。 – 2013-03-23 20:35:13

0

我一直沒有像我那樣密切關注,但似乎有一段時間它不讓我這樣做,但現在它確實允許我在Excel中打開文件時使用Proc Import。但是,它也可以打開Excel的另一個版本,並以只讀模式打開電子表格。我希望它不會這樣做,這是我在這篇文章中遇到的。我不知道它是否重要,但我使用PC文件服務器引擎來讀取工作表(DBMS = EXCELCS)。

注意:http://support.sas.com/kb/15/547.html表示如果文件打開而不是關閉,SAS可以得到不同的結果。我有這樣的經驗,如果電子表格是打開的,那麼當工作表關閉時,列將被讀作與讀取方式不同的類型。參考文獻:

相關問題