تحديد نوع البيانات عند قراءة البيانات XML في SAS

StackOverflow https://stackoverflow.com/questions/161828

  •  03-07-2019
  •  | 
  •  

سؤال

ولست بحاجة للسيطرة على نوع البيانات عند قراءة البيانات XML في SAS. تتم كتابة بيانات XML والوصول إليها باستخدام محرك libname XML في SAS.

و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 آخرين هم الآن الرقمية.

وكيف يمكنني التحكم في نوع البيانات عند قراءة البيانات XML في SAS؟

هل كانت مفيدة؟

المحلول

ونلقي نظرة على SAS XML مخطط. انها تسمح لك لإنشاء خريطة لقراءة (وwrte في 9.2) ملفات XML والصفات تحديد العمود.

وإذا كان هذا هو ملف XML الخاصة بك:

           ومن الواضح أن هذا النص        20081002        42        42     يمكنك إنشاء MAP مثل هذا:

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

نصائح أخرى

وأعتقد أنك بحاجة إلى تحديد بعض الخيارات أكس محددة مثال: بيان XML libname للحصول على دفعة والتصدير:

libname my_xml_out XML XMLMETA=SCHEMADATA;

لتشمل مخطط البيانات. أيضا، قد ترغب في حفظ مخطط XML إلى ملف منفصل لاستيراد لاحق:

libname my_xml_in XML XMLSCHEMA='external-file'

وبعد تصدير مخطط باستخدام XMLMETA=SCHEMA بطبيعة الحال. أعتقد هذه هي الوثائق التي تحتاجها .

وبصرف النظر عن أن استخدام ليبرالية من البيانات شكل على إنشاء مجموعة البيانات الأصلي هو الموصى بها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top