Pergunta

Eu preciso para controlar o tipo de dados ao ler dados XML em SAS. Os dados XML são escritos e acessado usando o motor libname XML no SAS.

SAS parece adivinhar o tipo de dados com base no conteúdo de uma coluna:. Se eu escrever "20081002" para os meus dados XML em uma coluna de caracteres, ele será lido novamente como uma variável numérica

Um exemplo:

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;

Apenas a última coluna é definida como o tipo de dados numéricos nos dados XML, mas quando eu copiá-lo para o meu trabalho da biblioteca, somente a coluna text_char é o caráter. Os outros 3 estão agora numérico.

Como posso controlar o tipo de dados ao ler dados XML no SAS?

Foi útil?

Solução

Dê uma olhada no SAS XML Mapper. Ele permite que você crie um mapa para ler (e wrte em 9.2) arquivos XML e especificando atributos de coluna.

Se este é o seu arquivo XML:

Esta é, obviamente, texto 20081002 42 42 Você poderia criar um mapa como este:

<!-- ############################################################ -->
<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>

E, em seguida, ler o arquivo 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;

Resultado:

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

Outras dicas

Eu acho que você precisa definir algumas opções específicas xml whith sua declaração XML libname para ir de exportação:

libname my_xml_out XML XMLMETA=SCHEMADATA;

Para incluir o esquema de dados. Além disso, você pode querer salvar o esquema XML para um arquivo separado para posterior importação:

libname my_xml_in XML XMLSCHEMA='external-file'

Depois de exportou o esquema usando XMLMETA=SCHEMA claro. Acho esta é a documentação que você precisa .

Além de que o uso liberal de declarações de formato sobre a criação de base de dados original é recomendado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top