2008-10-02 88 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