【问题标题】:SAS to Excel DDE produces test but not output dataSAS to Excel DDE 生成测试但不输出数据
【发布时间】:2019-04-04 09:05:31
【问题描述】:

我一直在关注在线文档并浏览其他堆栈溢出查询,但我还没有找到通过 DDE 将我的 SAS 数据集输出到 excel 的方法。

我运行的SAS版本是SAS9.4 我运行的excel版本是microsoft office 2016 - excel 2016

我用来导出的代码是

/*Excel DDE interface options*/ /*TEST*/
options noxwait noxsync;

X '"C:\Users\user.name\Desktop\template_dde.xlsx"';

data _null_;
    rc=sleep(15);
run;

filename ddedata dde 'excel|SFA!r2c1:r4000c56';

data _null_;
    file ddedata notab;
    set work.Results_output_format end=eof;
put '"THIS IS A TEST"';
run;

%LET timestamp = %SYSFUNC(PUTN(%SYSFUNC(DATE()),yymmddn8.));
%LET hourstamp = %SYSFUNC(COMPRESS(%SYSFUNC(TIME(),time.),%STR( :)));

data _null_;
    length cmnd $150.;
    file ddedata;

    cmnd = '"[save.as("C:\Users\user.name\Desktop\&timestamp._&hourstamp._template_dde.xlsx")]"';
    put cmnd;
    put '[quit()]';
run;

它输出“这是一个测试”,然后输出保存语句,但我的数据没有导出,文件也没有实际保存。

我是否忽略了什么?

【问题讨论】:

  • 要写入模板,我更喜欢在模板中有一个命名范围,然后您可以直接导出到 Excel 文件中的该命名范围。 FCOPY() 将复制模板文件以创建新版本,然后我也避免了另存为步骤。 sas.com/content/dam/SAS/en_ca/User%20Group%20Presentations/…
  • DDE 对于新进程来说并不是一个好主意,我仍然使用它的唯一原因是当我需要从 Excel 文件调用宏时,通常是转换为 PDF。跨度>
  • 谢谢!我会通读这个

标签: sas dde sas-studio


【解决方案1】:

SET 将数据集内容隐式放置在 Excel 文件中。您需要使用PUT 语句将数据添加到工作表。您还需要使用单独的文件名向Excel|system 频道发送命令。

您的代码在尝试的宏变量解析周围有单引号 - 这是不正确的。

此代码假定存在一个现有的工作簿c:\temp\template_dde.xlsx

* open template in Excel;
X '"C:\Temp\template_dde.xlsx"';

* wait for app to start and file to load;
data _null_; rc=sleep(3); run;

* define filerefs for data transfer and command execution;
filename ddedata dde 'excel|Sheet1!r2c1:r4000c56';
filename ddecmnd dde 'excel|System';

* pump data into excel cells at location specified in ddedata;
data _null_;
  file ddedata ; * <--- removed your NOTAB option, so now I dont have to put '09x' between each variable;

  set sashelp.class;
  put name sex age height weight; 
run;

* Extended ISO timestamp as yyyy-mm-dd_hh-mm-ss;
%let timestamp = %sysfunc(translate(%sysfunc(datetime(),E8601DT),%str(_-),%str(T:)));

* send commands to save workbook and close Excel;
data _null_;
    file ddecmnd;

    put "[save.as(""C:\Temp\&timestamp._template_dde.xlsx"")]";
    put '[quit()]';
run;

大量关于 DDE 的会议论文,例如 "SAS®-with-Excel Application Development: Tools and Techniques"、SUGI 31、LeRoy Bessler、Assurant Health

【讨论】:

  • 令我惊讶的是,您不需要在 FILE 语句中使用 dsd dlm='09'x 选项来让 PUT 语句在字段之间添加选项卡。
  • DDE 文件引用引擎将隐式添加 '09'x 分隔符。文档中有一个尴尬的讨论Using the NOTAB Option with DDE
  • 但这仅仅是因为编写 DDE 文档的人不了解 FILE 语句中的 DSD 选项的工作原理吗?
  • 这可行,但现在我将不得不做一些研究,只是简单地将列输出到列,因为字符串中的空格输出到不同的列,感谢您的帮助
  • 尝试恢复到NOTABS 并在PUTNOTABS 中使用显式'09'x 分隔符和文件名选项DSD DLM='09'x
猜你喜欢
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多