SAS:使用观察

时间:2014-04-15 10:20:37

标签: sas dde

我有一个关于如何在另一个命令中使用SAS数据库中的值的问题。就我而言,我有一个包含两个变量(cell和res)的数据库。 "细胞"包含对Excel工作表中单元格的引用,其中" res"应该复制。

所以我想使用存储在" cell"中的值。在我的命令链接到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";

然后将值写入Excel中的单元格A1。

是否有一些类似的方法可以在不调用宏的情况下工作?

感谢您的帮助!

了Christoph

1 个答案:

答案 0 :(得分: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步骤,并在执行上述步骤后执行。所以基本上你会生成尽可能多的DATA NULL 步骤,因为你的test数据集中有记录。