前のページ|次のページ

ISO 8601規格のSAS入力形式と出力形式を使用し、タイムゾーン付きの時刻値をインポートする

次の例では、様々な形式の時刻値を含んでいるXMLドキュメントをインポートします。XMLMapでは、FORMAT要素およびINFORMAT要素を使用して、それぞれ対応するSAS出力形式およびSAS入力形式を指定することにより、時刻が適切に表示されるようにします。
様々な形式の時刻値を含むXMLドキュメントの内容は次のとおりです。
<?xml version="1.0" ?>
<Root>
  <TIME>
    <LOCAL>09:00:00</LOCAL>
    <UTC>09:00:00Z</UTC>
    <OFFSET>14:00:00+05:00</OFFSET>
  </TIME>
</Root>
次のXMLMapは、SAS入力形式およびSAS出力形式を使用してXMLドキュメントをインポートし、時刻値の読み込みと書き出しを行います。
<?xml version="1.0" encoding="UTF-8"?>
<!-- ############################################################ -->
<!-- 2011-01-11T13:31:41 -->
<!-- SAS XML Libname Engine Map -->
<!-- Generated by XML Mapper, 903000.1.0.20101208190000_v930 -->
<!-- ############################################################ -->
<!-- ###  Validation report                                   ### -->
<!-- ############################################################ -->
<!-- XMLMap validation completed successfully. -->
<!-- ############################################################ -->
<SXLEMAP name="ISOtime" version="2.1">

    <NAMESPACES count="0"/>

    <!-- ############################################################ -->
    <TABLE name="TIME">
        <TABLE-PATH syntax="XPath">/Root/TIME</TABLE-PATH>

        <COLUMN name="LOCAL">
            <PATH syntax="XPath">/Root/TIME/LOCAL</PATH>
            <TYPE>numeric</TYPE>
            <DATATYPE>time</DATATYPE>
            <FORMAT width="8">E8601TM</FORMAT> 1
            <INFORMAT width="8">E8601TM</INFORMAT>
        </COLUMN>

        <COLUMN name="LOCALZONE">
            <PATH syntax="XPath">/Root/TIME/LOCAL</PATH>
            <TYPE>numeric</TYPE>
            <DATATYPE>time</DATATYPE>
            <FORMAT width="14">E8601LZ</FORMAT> 2
            <INFORMAT width="8">E8601TM</INFORMAT>
        </COLUMN>

        <COLUMN name="UTC">
            <PATH syntax="XPath">/Root/TIME/UTC</PATH>
            <TYPE>numeric</TYPE>
            <DATATYPE>time</DATATYPE>
            <FORMAT width="9">E8601TZ</FORMAT> 3
            <INFORMAT width="9">E8601TZ</INFORMAT>
        </COLUMN>

        <COLUMN name="OFFSET">
            <PATH syntax="XPath">/Root/TIME/OFFSET</PATH>
            <TYPE>numeric</TYPE>
            <DATATYPE>time</DATATYPE>
            <FORMAT width="14">E8601TZ</FORMAT> 4
            <INFORMAT width="14">E8601TZ</INFORMAT>
        </COLUMN>

    </TABLE>

</SXLEMAP>
時刻値をインポートするXMLMap構文についての説明を次に示します。
1 変数Localに対して、INFORMAT要素およびFORMAT要素で、SAS入力形式およびSAS出力形式としてE8601TMを指定します。これにより、拡張形式hh:mm:ss.ffffffで時刻値の読み込みと書き出しが行われます。タイムゾーンインジケータが存在しないため、値のコンテキストはローカルタイムとなります。
2 変数Localzone (変数Localと同じ値を読み込む変数)に対して、INFORMAT要素でSAS入力形式E8601TMを指定します。これにより、拡張形式hh:mm:ss.ffffffで時刻値が読み込まれます。タイムゾーンインジケータが存在しないため、値のコンテキストはローカルタイムとなります。
一方、FORMAT要素では、SAS出力形式E8601LZを指定します。これにより、拡張形式hh:mm:ss+|-hh:mmで時刻値が出力されます。出力形式E8601LZは、現在のローカルSASセッションによって決定される時刻値の末尾にUTCオフセットを追加します。出力形式E8601LZを使うことで、ローカルタイムの曖昧さをなくすような時刻表記を提供できます。
注: この時刻表記を使用する場合でも、時間に基づく値を混在させないことを推奨します。
3 変数UTCに対して、INFORMAT要素およびFORMAT要素で、SAS入力形式およびSAS出力形式としてE8601TZを指定します。これにより、拡張形式hh:mm:ss+|-hh:mmで時刻値の読み込みと書き出しが行われます。タイムゾーンインジケータが存在するため、値はUTCで表されるものと仮定されます。その値に対する調整または変換は行われません。
4 変数Offsetに対して、INFORMAT要素およびFORMAT要素で、SAS入力形式およびSAS出力形式としてE8601TZを指定します。これにより、拡張形式hh:mm:ss+|-hh:mmで時刻値の読み込みと書き出しが行われます。タイムゾーンオフセットが存在するため、タイムゾーンを区別するSAS入力形式を使って変数に時刻値を読み込む場合、その値はタイムゾーンインジケータを通じて要求されるUTC時間に調整されます。ただし、タイムゾーンコンテキストはその値と一緒には保存されません。タイムゾーンを区別するSAS出力形式を使って時刻値を書き出す場合、その値は、ゼロのオフセット値を伴うUTC時間として表現され、ローカルタイムに対する調整は行われません。
次のSASステートメントは、XMLドキュメントをインポートした後、PRINTプロシジャ出力を表示します。
filename timzn 'C:\My Documents\XML\Time.xml';
filename map 'C:\My Documents\XML\Time.map';

libname timzn xmlv2 xmlmap=map;

proc print data=timzn.time;
run; 
インポートされたデータセットTIMZN.TIMEのPRINTプロシジャ出力
インポートされたデータセットTIMZN.TIMEのPRINTプロシジャ出力
前のページ|次のページ|ページの先頭へ