2008-10-02 89 views
2

当读取SAS中的XML数据时,需要控制数据类型。 XML数据是使用SAS中的XML libname引擎编写和访问的。在读取SAS中的XML数据时设置数据类型

SAS似乎根据列的内容猜测数据类型:如果我将“20081002”写入字符列中的XML数据,它将作为数值变量读回。

一个例子:

filename my_xml '/tmp/my.xml'; * Yes, I use SAS on Unix *; 
libname my_xml XML; 

data my_xml.data_type_test; 
    text_char="This is obviously text"; 
    date_char="20081002"; 
    num_char="42"; 
    genuine_num=42; 
run; 

proc copy inlib=my_xml outlib=WORK; 
run; 

libname my_xml; 
filename my_xml CLEAR; 

只有最后一列定义为XML数据的数值数据类型,但是当我将其复制到我的工作库中,仅列文本字符text_char是性格。其他3个现在是数字。

如何在SAS中读取XML数据时控制数据类型?

回答

6

查看SAS XML Mapper。 它允许您创建一个映射来读取(并在9.2中定义)XML文件并指定列属性。

如果这是你的XML文件:

这显然是文本 您可以创建这样一个图:

<!-- ############################################################ --> 
<TABLE name="DATA_TYPE_TEST"> 
    <TABLE-PATH syntax="XPath">/TABLE/DATA_TYPE_TEST</TABLE-PATH> 

    <COLUMN name="text_char"> 
     <PATH syntax="XPath">/TABLE/DATA_TYPE_TEST/text_char</PATH> 
     <TYPE>character</TYPE> 
     <DATATYPE>string</DATATYPE> 
     <LENGTH>22</LENGTH> 
    </COLUMN> 

    <COLUMN name="date_char"> 
     <PATH syntax="XPath">/TABLE/DATA_TYPE_TEST/date_char</PATH> 
     <TYPE>numeric</TYPE> 
     <DATATYPE>integer</DATATYPE> 
     <FORMAT width="9">DATE</FORMAT> 
     <INFORMAT width="8">ND8601DA</INFORMAT> 
    </COLUMN> 

    <COLUMN name="num_char"> 
     <PATH syntax="XPath">/TABLE/DATA_TYPE_TEST/num_char</PATH> 
     <TYPE>character</TYPE> 
     <DATATYPE>string</DATATYPE> 
     <LENGTH>2</LENGTH> 
    </COLUMN> 

    <COLUMN name="genuine_num"> 
     <PATH syntax="XPath">/TABLE/DATA_TYPE_TEST/genuine_num</PATH> 
     <TYPE>numeric</TYPE> 
     <DATATYPE>integer</DATATYPE> 
    </COLUMN> 

</TABLE> 

然后读取XML文件:

filename my 'C:\temp\my.xml'; 
filename SXLEMAP 'C:\temp\MyMap.map'; 
libname my xml xmlmap=SXLEMAP access=READONLY; 

title 'Table DATA_TYPE_TEST'; 
proc contents data=my.DATA_TYPE_TEST varnum; 
run; 
proc print data=my.DATA_TYPE_TEST(obs=10); 
run; 

结果:

Table DATA_TYPE_TEST 

The CONTENTS Procedure 

Data Set Name  MY.DATA_TYPE_TEST Observations    
Member Type   DATA     Variables    4 
Engine    XML     Indexes    0 
Created    .     Observation Length 0 
Last Modified  .     Deleted Observations 0 
Protection        Compressed   NO 
Data Set Type        Sorted    NO 
Label                
Data Representation Default          
Encoding    Default          


Variables in Creation Order 

# Variable  Type Len Format Informat  Label 

1 text_char  Char  22 $22.  $22.   text_char 
2 date_char  Num  8 DATE9. ND8601DA8. date_char 
3 num_char  Char  2 $2.  $2.   num_char 
4 genuine_num Num  8 F8.  F8.   genuine_num 

Table DATA_TYPE_TEST 

                   genuine_ 
    Obs text_char     date_char num_char  num 

     1 This is obviously text 02OCT2008  42    42 
1

我认为你需要定义你的蒙山XML LIBNAME语句一些特定于XML选项导出去:

libname my_xml_out XML XMLMETA=SCHEMADATA; 

要包括数据架构。此外,您可能希望将XML架构保存,以便以后导入一个单独的文件:

libname my_xml_in XML XMLSCHEMA='external-file' 

导出当然使用XMLMETA=SCHEMA模式之后。 我认为this is the documentation you need

除了在原始数据集创建的格式声明的自由使用推荐。

+0

感谢您的输入。不幸的是,当我使用XMLSCHEMA从XML读取数据时,SAS仍然声称我的字符数据看起来像数字,是NUM数据类型。 – 2008-10-03 09:19:39