2014-04-15 54 views
0

我有一個關於如何在另一個命令中使用來自SAS數據庫的值的問題。在我的情況下,我有一個包含兩個變量(cell和res)的數據庫。 「單元格」包含對Excel工作表中單元格的引用,其中應複製「res」的值。SAS:使用oberservation

所以我想使用存儲在我的命令鏈接到Excel工作表「單元格」的值。此代碼不能正常工作(與||串聯不起作用。)

DATA _null_; 
SET test; 
FILENAME ExcelTmp DDE "EXCEL|[&myInputTemplate.]&mySheet.!" || cell; 
FILE ExcelTmp NOTAB LRECL=7000; 
PUT res; 
RUN; 

錯誤消息:

ERROR 23-2: Invalid option name ||. 

1491! DDE "EXCEL|[&myInputTemplate.]&mySheet.!" || cell; 
ERROR: Error in the FILENAME statement. 
ERROR 23-2: Invalid option name cell. 

1492  FILE ExcelTmp NOTAB LRECL=7000; 
ERROR 23-2: Invalid option name NOTAB. 

如果我寫

FILENAME ExcelTmp DDE "EXCEL|[&myInputTemplate.]&mySheet.!R1C1:R1C1"; 

那麼值寫入單元格A1在Excel中。

是否有一些類似的方法可以在不調用宏的情況下工作?

感謝您的幫助!

克里斯托夫

+0

我會看看你的'filename'語句,語法有問題。 「Excel」後面是不是缺少'|「' – rambles

+0

如果你發佈了實際的錯誤信息 – mjsqu

回答

1

使用來自一個數據集作爲命令/語句的一部分的值的通常的方法是CALL EXECUTE例程:

DATA _null_; 
    SET test; 
    call execute("DATA _NULL_;"); 
    call execute(cats("FILENAME ExcelTmp DDE ""EXCEL|[&myInputTemplate.]&mySheet.!",cell,""";")); 
    call execute("FILE ExcelTmp NOTAB LRECL=7000;"); 
    call execute("PUT '"||res||"';"); 
    call execute("RUN;"); 
run; 

此代碼生成DATA-的步驟,在緩衝液中堆疊和將被執行執行上述步驟後。因此,基本上,您將在test數據集中記錄數據,並生成儘可能多的數據步驟。

0

假設你想更新多個細胞,cell是形式RnCn,這樣的事情可能工作...

還需要事先確定的單元格區域,例如R2C2:R100:C5。

 
%LET RANGE = R2C2:R100C5 ; 

DATA _null_; 
SET test; 
FILENAME ExcelTmp DDE "EXCEL|[&myInputTemplate.]&mySheet.!&RANGE" ; 
FILE ExcelTmp NOTAB LRECL=7000; 
put "[select(""" cell """)]" ; 
PUT res; 
RUN; 
+0

嗨, 其實'cell'的範圍格式是」RnCn:RnCn「很容易修改代碼,使得你的方法可以工作,但是我不希望在開始時指定一個靜態範圍,這就是爲什麼我想知道是否可以從數據庫中讀取範圍作爲單個單元格。 – Enkidu