题
在SAS中读取XML数据时,我需要控制数据类型。使用SAS中的XML libname引擎编写和访问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数据中的数值数据类型,但是当我将其复制到我的WORK库中时,只有列 text_char 是字符。其他3个现在是数字。
如何在SAS中读取XML数据时控制数据类型?
解决方案
看一下SAS XML Mapper。 它允许您创建一个映射来读取(和9.2中的wrte)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 XML语句:
libname my_xml_out XML XMLMETA=SCHEMADATA;
包含数据架构。此外,您可能希望将XML架构保存到单独的文件中以供以后导入:
libname my_xml_in XML XMLSCHEMA='external-file'
使用 XMLMETA = SCHEMA
导出架构后,当然。
我想这是你需要的文件。
除了建议在原始数据集创建时自由使用格式语句。
不隶属于 StackOverflow