【发布时间】:2019-02-04 12:27:46
【问题描述】:
我已经在我的 Windows 7 中的 PC SAS 中设置了一个代码,其中包含 Excel 2010 和 PC SAS 9.4。基本上,代码所做的是将数据集“wide2”粘贴到当时在操作系统中打开的唯一 excel 文件中,然后保存它。以下是我使用的代码:
%macro paste(number);
proc print data=wide2;
run;
PROC CONTENTS DATA=wide2 /*NOPRINT*/ OUT=CNT ;
RUN;
PROC SORT DATA=CNT ;
BY VARNUM ;
RUN;
PROC SQL /*NOPRINT*/;
SELECT NAME
INTO: VARS SEPARATED BY ' '
FROM CNT ;
SELECT COUNT(DISTINCT NAME)
INTO: COLS SEPARATED BY ' '
FROM CNT ;
SELECT NOBS
INTO: ROWS
FROM CNT
WHERE VARNUM = 1;
QUIT;
proc print data=cnt;run;
FILENAME TEMP DDE "EXCEL|Sheet&number.!R1C1:R200C200" ;
data _null_ ;
file temp ;
if _n_=1 then do;
do _n_=1 to &cols ;
set cnt(keep=name rename=(name=__name__)) ;
put __name__ @;
end;
put;
end;
set wide2 ;
put &vars ;
run ;
%mend paste;
所以当我执行像 %paste(1) 这样的宏时,它会将数据粘贴到 Excel 的 Sheet1。
现在我们已迁移到具有相同 PC SAS 版本但 Excel 2016 的 Windows 10。 当我使用相同的数据集运行相同的代码时,PC SAS 会在几秒钟后永久挂起,然后我不得不终止该进程。打开的 excel 文件没有任何反应。由于 PC SAS 挂起,我什至看不到日志。请为此提出解决方案。(PCSAS 挂起时的顶部栏显示“正在运行数据步骤”)
【问题讨论】:
-
2017 年 12 月有一个安全更新禁用了 Excel 的 DDE。您需要进入 Excel、安全设置并重新启用 DDE。然后再试一次。您还需要确保启用了
xcmd选项。我通常至少有 SAS 打开 Excel 以确保命令也正确传递。如果您可以添加该行进行测试,它有助于调试您的代码。如果您需要有关启用 DDE 的具体说明,请参阅今年其他一些 DDE SAS 帖子。
标签: excel automation sas windows-10 dde