全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3419 1
2010-05-04
SAS9 XML操作

在SAS9.1.3版本中,开始支持XML操作,通过其强大的XML引擎技术,已经把XML完美的体现在SAS里面
具体体现如下:
从SAS数据集导出一个XML文档,这个XML文档可以被其它产品使用,也可以被用于不同主机间的数据传输
导入XML文档,这个XML文档可以转换为SAS数据集

在XML引擎使用上也非常简单,同其它引擎使用一样,首先要通过LIBNAME分配一个采用XML引擎的库,如下面例子,简单的把一个SAS数据集导出为一个XML文件

libname myfiles 'C:\My Files\';
libname myxml xml 'C:\My Files\XML\Singers.xml';
data myxml.Singers;
   set myfiles.Singers;
run;

输出的XML文件内容如下:
<?xml version="1.0" encoding="windows-1252" ?>
<TABLE>
   <SINGERS>
      <FirstName> Tom </FirstName>
      <Age> 62 </Age>
   </SINGERS>
   <SINGERS>
      <FirstName> Willie </FirstName>
      <Age> 70 </Age>
   </SINGERS>
   <SINGERS>
      <FirstName> Randy </FirstName>
      <Age> 43 </Age>
   </SINGERS>
</TABLE>

XML引擎常见问题:
1、SAS XML引擎是采用DOM还是采用SAX方式处理?
答:XML会根据不同的情况使用不同的方式,如下:
  如果格式化输出类型为GENERIC(缺省)或者ORACLE,那么XML引擎将采用DOM模型
  如果你使用XMLMAP以导入一个XML文件,那么XML引擎将采用SAX模型

2、XML引擎会验证XML文档么?
答:不会,XML引擎会假设XML文档内容是全部正确的,引擎不使用DTD或者 SCHEMA

3、XML引擎和ODS MARKUP输出有什么不同?
答:ODS MARKUP可以输出XML文档,但不能读XML文档

4、为什么我导入XML文档时发生错误
答:XML引擎读文件依赖于其相应的选项XMLTYPE=。如果XML文件不符合SAS格式,将会报错,你可以通过XMLMAP来规范化你的XML文件
   一个例外是HTML文件格式,XML引擎只支持导出,而不支持导入

5、我可以使用SAS数据选项作用于XML引擎上么?
答:可以,但需要小心使用

6、为什么导出的XML文件中含有空格
答:因为XML引擎是和W3C标准保持一致,所有会在元素的前、后加入空格,如果你想去除空格也可以,只需使用指定的 Tagset ,如下:
libname testxml xml 'C:\My Documents\XML\nospace.xml' tagset=tagsets.sasxmnsp;
proc copy in=sashelp out=testxml;
   select class;
run;
这样产生的XML中就不会含有空格,如下
   <?xml version="1.0" encoding="windows-1252" ?>
- <TABLE>
  - <CLASS>
     <Name>Alfred</Name>
     <Sex>M</Sex>
     <Age>14</Age>
     <Height>69</Height>
     <Weight>112.5</Weight>
    </CLASS>

7、可以自定义自己的输出/输入格式么?
答:可以,通过使用Tagset,如XML引擎在默认输出时元素名采用字段名,如果你想自定义输出为标签名,可以如下使用:
   /*产生数据集*/
   data Singers;
      input Name $ Style $;
      label Name="SingerFirstName"
         Style="MusicStyle";
      datalines;
   Tom Rock
   Kris Country
   Willie Country
   Barbra Contemporary
   Paul Rock
   Randy Country
   ;
   run;
   /*定义TAGSET*/
   proc template;
       define tagset Tagsets.Uselabs;
       parent = tagsets.sasxmog;
       notes "Uses label instead of name for tags";
       define event SASColumn;
          start:
          ndent;
          put     '<' ;
          put     TEXT          / if cmp(XMLDATAFORM, "ATTRIBUTE");
          put     ' name="'     / if cmp(XMLDATAFORM, "ATTRIBUTE");
          put     LABEL;
          put     '"'           / if cmp(XMLDATAFORM, "ATTRIBUTE");
          break;
          finish:
          xdent                 / if exists(MISSING);
          break                 / if exists(MISSING);
          put     ' />'         / if cmp(XMLDATAFORM, "ATTRIBUTE");
          put     CR            / if cmp(XMLDATAFORM, "ATTRIBUTE");
          xdent                 / if cmp(XMLDATAFORM, "ATTRIBUTE");
          break                 / if cmp(XMLDATAFORM, "ATTRIBUTE");
          put     '</' ;
          put     LABEL;
          put     '>' ;
          put     CR;
          xdent;
          break;
       end;
       end; /* uselabs */
    run;
    /*输出XML文件*/
   libname testxml xml 'C:\My Documents\XML\labels.xml' tagset=tagsets.uselabs;
   proc copy in=work out=testxml;
    select Singers;
   run;  

上面只是SAS XML引擎介绍的一部分,具体请参考下面网址:

http://support.sas.com/rnd/base/topics/sxle913/usersguide913.htm
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2010-5-4 13:55:12
这个要学习下,谢谢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群