質問
SASでXMLデータを読み取るときに、データ型を制御する必要があります。 XMLデータは、SASのXML libnameエンジンを使用して書き込まれ、アクセスされます。
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をご覧ください。 XMLファイルを読み取り(9.2で記述)、列属性を指定するマップを作成できます。
これが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
を使用してスキーマをエクスポートした後。
これが必要なドキュメントです。
元のデータセットの作成時にformatステートメントを自由に使用することをお勧めします。
所属していません StackOverflow