SAS到Excel DDE生成测试数据,但不输出数据
我一直在线关注文档并浏览其他堆栈溢出查询,但还没有找到通过DDE将SAS数据集输出到excel的方法 我正在运行的SAS版本是SAS9.4 我正在运行的excel版本是microsoft office 2016-excel 2016 我用来导出的代码是SAS到Excel DDE生成测试数据,但不输出数据,sas,dde,sas-studio,Sas,Dde,Sas Studio,我一直在线关注文档并浏览其他堆栈溢出查询,但还没有找到通过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"'; dat
/*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\×tamp._&hourstamp._template_dde.xlsx")]"';
put cmnd;
put '[quit()]';
run;
它输出“这是一个测试”,然后输出save语句,但我的数据没有导出,文件也没有实际保存
我忽略了什么吗?集合不会隐式地将数据集内容放在Excel文件中。您需要使用
PUT
语句将数据添加到工作表中。您还需要使用单独的文件名向Excel |系统
频道发送命令
您的代码在尝试的宏变量解析周围有单引号,这是不正确的
此代码假定存在一个现有工作簿c:\temp\template\u 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\×tamp._template_dde.xlsx"")]";
put '[quit()]';
run;
*在Excel中打开模板;
X''C:\Temp\template_dde.xlsx';
*等待应用程序启动并加载文件;
数据为空;rc=睡眠(3);跑
*定义用于数据传输和命令执行的文件引用;
文件名ddedata dde'excel | Sheet1!r2c1:r4000c56';
文件名ddecmnd dde“excel |系统”;
*在ddedata中指定的位置将数据泵入excel单元格;
数据为空;
文件数据;* SET不会将数据集内容隐式地放置在Excel文件中。您需要使用PUT
语句将数据添加到工作表中。您还需要使用单独的文件名向Excel |系统
频道发送命令
您的代码在尝试的宏变量解析周围有单引号,这是不正确的
此代码假定存在一个现有工作簿c:\temp\template\u 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\×tamp._template_dde.xlsx"")]";
put '[quit()]';
run;
*在Excel中打开模板;
X''C:\Temp\template_dde.xlsx';
*等待应用程序启动并加载文件;
数据为空;rc=睡眠(3);跑
*定义用于数据传输和命令执行的文件引用;
文件名ddedata dde'excel | Sheet1!r2c1:r4000c56';
文件名ddecmnd dde“excel |系统”;
*在ddedata中指定的位置将数据泵入excel单元格;
数据为空;
文件数据;*令我惊讶的是,您不需要在FILE语句上设置dsd dlm='09'x
选项,PUT语句就可以在字段之间添加制表符。DDE fileref引擎将隐式添加'09'x分隔符。文档中有一个令人尴尬的讨论,但这是否仅仅是因为编写DDE文档的人不了解FILE语句上的DSD选项是如何工作的?这是可行的,但现在我必须做一些研究,仅仅是将列输出到列,作为字符串中的空格输出到不同的列,感谢您的帮助尝试返回到notab
,并在PUT
中使用显式的'09'x
分隔符,或者notab
和文件名选项DSD DLM='09'x
我很惊讶,您不需要在FILE语句上设置DSD DLM='09'x
选项,PUT语句就可以在字段之间添加制表符。DDE fileref引擎将隐式添加'09'x分隔符。文档中有一个令人尴尬的讨论,但这是否仅仅是因为编写DDE文档的人不了解FILE语句上的DSD选项是如何工作的?这是可行的,但现在我必须做一些研究,仅仅是将列输出到列,作为字符串中的空格输出到不同的列,感谢您的帮助尝试返回到notab
,并在PUT
中使用显式的'09'x
分隔符,或NOTABS
和文件名选项DSD DLM='09'x
要写入模板,我希望模板中有一个命名范围,然后您可以直接将其导出到Excel文件中的命名范围。FCOPY()将复制模板文件以创建新版本,然后我也避免了另存为步骤。DDE对于一个新的进程来说并不是一个好主意,我仍然使用它的唯一原因是当我需要从Excel文件调用宏时,通常是转换为PDF。谢谢!我将通读这篇文章以写入模板。我希望模板中有一个命名区域,然后您可以直接将导出过程导出到Excel文件中的命名区域。FCOPY()将复制模板文件以创建新版本,然后我也避免了另存为步骤。DDE对于一个新的进程来说并不是一个好主意,我仍然使用它的唯一原因是当我需要从Excel文件调用宏时,通常是转换为PDF。谢谢!我要通读一遍