تحديد نوع البيانات عند قراءة البيانات XML في SAS
سؤال
ولست بحاجة للسيطرة على نوع البيانات عند قراءة البيانات 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
بطبيعة الحال.
أعتقد هذه هي الوثائق التي تحتاجها .
وبصرف النظر عن أن استخدام ليبرالية من البيانات شكل على إنشاء مجموعة البيانات الأصلي هو الموصى بها.