【问题标题】:How to make PC SAS DDE Sever Code to communicate with Windows 10 Excel 2016如何使 PC SAS DDE 服务器代码与 Windows 10 Excel 2016 进行通信
【发布时间】: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


【解决方案1】:

wide2 数据集中有多少列和多少行?您发布的代码使用 SAS 9.4M4 和 Office 365 在我的系统上运行。我使用了这个数据集。

data wide2;
  do id=1 to 3;
    array x(15) (1:15);
    output;
  end;
  format _numeric_ 2.;
run;

【讨论】:

    猜你喜欢
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多