SAS DDE导入与导出文件
何为DDE
DDE是一种传统方法,SAS不鼓励使用DDE。 相反,请考虑较新的SAS功能支持的替代方案。
当您现代化到集中式SAS环境时,请注意几个挑战。 例如,如果您的SAS会话在远程计算机(通常是未在Windows上运行的计算机)上运行,则SAS无法使用DDE与本地Microsoft Excel应用程序进行通信。 DDE仅在同一台计算机上的两个Windows进程(SAS和Excel)之间工作。
但是,只要您将SAS软件及其DDE合作伙伴(通常是Microsoft Excel)置于同一台Windows PC上运行,使用DDE的SAS程序仍然可以正常工作。
如果您的进程依赖于DDE但需要在很短的时间内转移到客户端/服务器SAS环境,请采用以下方法。 使用SAS for Windows维护指定的计算机以执行DDE基本工作,即使将其他进程移至企业SAS环境也是如此。
动态数据交换(DDE)是一种在Windows应用程序之间动态交换信息的方法。 DDE使用客户端/服务器关系使客户端应用程序能够从服务器应用程序请求信息。 SAS始终是客户。在此角色中,SAS从服务器应用程序请求数据,将数据发送到服务器应用程序或向服务器应用程序发送命令。
您可以将DDE与DATA步骤,SAS宏工具,SAS / AF应用程序或请求和生成数据的SAS的任何其他部分一起使用。 DDE有许多潜在用途。一种用途是从Windows电子表格或数据库应用程序中获取数据。
您可以通过访问以下URL来访问动态数据交换(DDE)支持的应用程序。支持Word和Excel应用程序。不支持PowerPoint应用程序。
注意:许多Windows程序(包括SAS)现在都支持OLE以促进应用程序之间的通信。如果需要与支持OLE的应用程序共享数据,您可能更喜欢使用SAS内置的OLE支持。有关更多信息,请参阅关于OLE。
DDE语法
要在SAS中使用DDE,请使用以下语法发出FILENAME语句:
FILENAME fileref DDE 'DDE-triplet' <DDE-options>;
fileref
是一个有效的fileref(如引用外部文件中所述)。
DDE
是设备类型关键字,告诉SAS您要使用动态数据交换。
'DDE-triplet'
是DDE外部文件的名称。
DDE示例概述
本节提供了在Windows下使用DDE和SAS的几个示例。 这些示例使用Microsoft Excel和Microsoft Word作为DDE服务器,但任何支持DDE作为服务器的应用程序都可以与SAS通信。
在运行这些示例之前,必须先调用Microsoft Excel和Microsoft Word,然后打开示例中使用的电子表格或文档。
注意:DDE示例包含在您从"帮助"菜单访问的特定于主机的示例程序中。
使用X命令打开DDE服务器
可以使用SAS代码中的X命令打开DDE服务器应用程序。 必须关闭XWAIT和XSYNC选项。可以加入x=sleep( )确保EXCEL或者WORD完全打开。
选项noxwait noxsync;
x '"C:\program files\microsoft office\office14\excel.exe"';
如果路径包含空格,则路径周围需要双引号。 单引号用于X命令。
使用DDE从Microsoft Excel读取数据
您可以使用DDE将Excel应用程序中的数据读入SAS,如下例所示:
filename monthly dde 'excel|sheet1!r1c1:r10c3';
data monthly;
infile monthly;/*导入数据*/ 输出数据是file
input var1 var2 var3;/*要导入的变量名*/ 输出数据是put
run;
proc print;
run;
使用DDE从Microsoft Word读取数据
此示例从给定书签的Microsoft Word文档中读取数据。
filename testit dde 'winword|"c:\temp\testing.doc"!MARK' notab;
libname workdir 'c:\temp';
/* Get ready to read the first bookmark. */
data workdir.worddata;
length wordnum $5;
infile testit;
input wordnum $;
run;
proc print;
run;
阅读遗漏数据
此示例说明从名为SHEET1的Excel电子表格中读取缺少的数据。 此示例读取第1列到第3列以及第10行到第20行中的数据。某些数据单元可以为空白。 以下是一些数据的示例:
...
10 John Raleigh Cardinals
11 Jose North Bend Orioles
12 Kurt Yelm Red Sox
13 Brent Dodgers
...
以下是可以将这些数据正确读取到SAS数据集中的代码:
filename mydata
dde 'excel|sheet1!r10c1:r20c3';
data in;
infile mydata dlm='09'x notab dsd missover;
informat name $10. town $char20.
team $char20.;
input name town team;
run;
proc print data=in;
run;
x "C:\Users\线宝\Desktop\123.xlsx";
data _null_;
x=sleep(5);
run;
data test1;
set sashelp.class;
run;
filename rrr dde 'excel|sheet1!r1c1:r10c10';
data test2;
set test1; /*读入数据集*/
file rrr; /*打开excel*/
put name sex; /*输出相关变量*/
run;