いくつかのSASデータセットにXMLファイルを読み込みたいとします。 SAS XMLマップでは、X-Path(バージョン1)を使用してXML内の行を生成する要素と、列の値を含む要素または属性を参照するその他のX-Paht式を参照します。残念ながら、私が検索した値は必ずしも必要な行にリンクされているわけではありません。TABLE PATH SAS XML MAPSに対する列PATHの表現方法
簡単な例:このXMLからわき
探しを
<?xml version="1.0" encoding="iso-8859-1" ?>
<street>
<house>
<houseNumber>1</houseNumber>
<resident>Albert</resident>
<pet>dog</pet>
</house>
<house>
<houseNumber>2</houseNumber>
<resident>Bea</resident>
<resident>Clemance</resident>
</house>
<house>
<houseNumber>3</houseNumber>
<!--remark: for sale-->
</house>
<house>
<houseNumber>4</houseNumber>
<resident>Dave</resident>
<resident>Eve</resident>
<pet>Cat</pet>
</house>
</street>
私は、このデータ
Obs houseNumber name pet
1 1 Albert dog
2 2 Bea
3 2 Clemance
4 4 Dave cat
5 4 Eve cat
しかし、このマップ
<?xml version="1.0" encoding="UTF-8"?>
<SXLEMAP name="AUTO_GEN" version="2.1">
<NAMESPACES count="0"/>
<TABLE description="residents" name="resident">
<TABLE-PATH syntax="XPath">resident</TABLE-PATH>
<COLUMN name="houseNumber" retain="YES">
<PATH syntax="XPath">houseNumber</PATH>
<TYPE>numeric</TYPE>
<DATATYPE>integer</DATATYPE>
</COLUMN>
<COLUMN name="name">
<PATH syntax="XPath">resident</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>32</LENGTH>
</COLUMN>
<COLUMN name="pet">
<PATH syntax="XPath">pet</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>32</LENGTH>
</COLUMN>
</TABLE>
</SXLEMAP>
を使用して、これを抽出したいと思いますタラ電子
filename SXLELIB 'C:\MyFolder\xml.xml';
filename SXLEMAP 'C:\MyFolder\map.map';
libname SXLELIB xmlv2 xmlmap=SXLEMAP access=READONLY;
proc print data=SXLELIB.resident(obs=100);
run;
私はこの取得:
Obs houseNumber name pet
1 1 Albert
2 2 Bea bird
3 2 Clemance
4 4 Dave
5 4 Eve
_thisはverry簡単な例ですが、ジョーはエレガントな2017年7月12日に解決します。 しかし、彼の解決策は、それゆえ私は
より複雑な例として供給し、私の実際の生活の問題のために動作しません:私は
を抽出したいと思い、このXMLからheterogeneour名<?xml version="1.0" encoding="iso-8859-1" ?>
<street>
<house>
<houseNumber>1</houseNumber>
<adult>
<name>Albert</name>
<age>41</age>
</adult>
<child>
<name>Ken</name>
<age>1</age>
</child>
</house>
<house>
<houseNumber>2</houseNumber>
<adult>
<name>Bea</name>
<age>42</age>
</adult>
<adult>
<name>Clemance</name>
<age>43</age>
</adult>
</house>
<appartment>
<houseNumber>3</houseNumber>
<suiteNumber>1</suiteNumber>
<!--remark: for rent-->
</appartment>
<appartment>
<houseNumber>3</houseNumber>
<suiteNumber>2</suiteNumber>
<adult>
<name>Ivette</name>
<age>45</age>
<adult>
<adult>
<name>Jacque</name>
<age>51</age>
<adult>
<child>
<name>Lea</name>
<age>2</age>
</child>
<child>
<name>Marie</name>
<age>3</age>
</child>
</appartment>
<appartment>
<houseNumber>3</houseNumber>
<suiteNumber>2</suiteNumber>
<adult>
<name>Henri</name>
<age>44</age>
<adult>
</appartment>
<house>
<houseNumber>4</houseNumber>
<adult>
<name>Dave</name>
<age>46</age>
</adult>
<adult>
<name>Eve</name>
<age>51</age>
</adult>
</house>
<house>
<houseNumber>5</houseNumber>
<adult>
<name>Francis</name>
<age>47</age>
</adult>
<adult>
<name>Gertrude</name>
<age>48</age>
</adult>
</house>
<house>
<houseNumber>6</houseNumber>
<!--remark: for sale-->
</house>
</street>
をObs name age number suite
1 Albert 41 1 .
2 Ken 1 1 .
3 Bea 42 2 .
4 Clemance 43 2 .
5 Ivette 45 3 2
6 Jacque 45 3 2
7 Lea 2 3 2
8 Marie 3 3 2
9 Henri 44 3 3
10 Dave 46 4 .
11 Eve 51 4 .
12 Francis 47 5 .
13 Gertrude 48 5 .
Obs name age number suite
1 Albert 41 1 .
2 Ken 1 1 .
3 Bea 42 2 .
4 Clemance 43 2 .
5 Ivette 45 3 2
6 Jacque 45 3 2
7 Lea 2 3 2
8 Marie 3 3 2
9 Henri 44 3 3
10 Dave 46 4 .
11 Eve 51 4 .
12 Francis 47 5 .
13 Gertrude 48 5 .
名前からの相対アドレスを使用してください。
<TABLE description="relative address from name" name="resident_1">
<TABLE-PATH syntax="XPath">name</TABLE-PATH>
<COLUMN name="name">
<PATH syntax="XPath">.</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>32</LENGTH>
</COLUMN>
<COLUMN name="age" retain="YES">
<PATH syntax="XPath">../age</PATH>
<TYPE>numeric</TYPE>
<DATATYPE>integer</DATATYPE>
</COLUMN>
<COLUMN name="number">
<PATH syntax="XPath">../../number</PATH>
<TYPE>numeric</TYPE>
<DATATYPE>integer</DATATYPE>
</COLUMN>
<COLUMN name="suite">
<PATH syntax="XPath">../../suiteNumber</PATH>
<TYPE>numeric</TYPE>
<DATATYPE>integer</DATATYPE>
</COLUMN>
</TABLE>
しかし、それは私だけ与え欠損値は
だから、私は絶対アドレス
良いです<TABLE description="name based absolute addresses" name="resident_2">
<TABLE-PATH syntax="XPath">name</TABLE-PATH>
<COLUMN name="name">
<PATH syntax="XPath">name</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>32</LENGTH>
</COLUMN>
<COLUMN name="age" retain="YES">
<PATH syntax="XPath">age</PATH>
<TYPE>numeric</TYPE>
<DATATYPE>integer</DATATYPE>
</COLUMN>
<COLUMN name="number">
<PATH syntax="XPath">houseNumber</PATH>
<TYPE>numeric</TYPE>
<DATATYPE>integer</DATATYPE>
</COLUMN>
<COLUMN name="suite">
<PATH syntax="XPath">suiteNumber</PATH>
<TYPE>numeric</TYPE>
<DATATYPE>integer</DATATYPE>
</COLUMN>
</TABLE>
を試してみましたが、値が忘れられているとLEAは二つの問題
- で私をVES一度使用しても、私はまだ値がないソムを持っています
- 年齢が名前の後に来るにつれて、年齢はあまりにも遅く、henc eは下向き
シフト:
Obs name age number suite
1 Albert . 1 .
2 Ken 41 . .
3 Bea 1 2 .
4 Clemance 42 . .
5 Ivette 43 3 2
6 Jacque 45 . .
7 Lea 45 . .
8 Marie 2 . .
9 Henri 3 3 3
10 Dave 44 4 .
11 Eve 46 . .
12 Francis 51 5 .
13 Gertrude 47 . .
だから私はage
代わりのname
から始まり、また、二つの問題
と私VESリーで保持オプション
<TABLE description="age based absolute addresses" name="resident_3">
<TABLE-PATH syntax="XPath">age</TABLE-PATH>
<COLUMN name="name">
<PATH syntax="XPath">name</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>32</LENGTH>
</COLUMN>
<COLUMN name="age" retain="YES">
<PATH syntax="XPath">age</PATH>
<TYPE>numeric</TYPE>
<DATATYPE>integer</DATATYPE>
</COLUMN>
<COLUMN name="number" retain="yes">
<PATH syntax="XPath">houseNumber</PATH>
<TYPE>numeric</TYPE>
<DATATYPE>integer</DATATYPE>
</COLUMN>
<COLUMN name="suite" retain="yes">
<PATH syntax="XPath">suiteNumber</PATH>
<TYPE>numeric</TYPE>
<DATATYPE>integer</DATATYPE>
</COLUMN>
</TABLE>
を使用してみました
- houuseとsuite numbeとしてrsはeve rのために保持され、あまりに長くドラッグします。
- 私は年齢が不足している人がいませんジャック・)
:
Obs name age number suite
1 Albert 41 1 .
2 Ken 1 1 .
3 Bea 42 2 .
4 Clemance 43 2 .
5 Ivette 45 3 2
6 Lea 2 3 2
7 Marie 3 3 2
8 Henri 44 3 3
9 Dave 46 4 3
10 Eve 51 4 3
11 Francis 47 5 3
12 Gertrude 48 5 3
誰もがよりよい解決策を持っていますか?
本当の問題:私は私が外国のアカウントを報告してxmlファイルに書いたアドレスデータをリードバックするために作成したファイルからアドレスデータをリードバックするために無駄にしようとした後、私の質問を提起したCRSからアドレスまたはFATCAファイル
を読みます所有者は、Common Reporting Standard User Guide
アドレスは、最初に発生するResCountryCode
の1つの欄しか持たない。それらは、蛾Individual
およびOrganization
で発生する。
おかげでジョー。これは私が上に提出した単純化された問題を解決するが、私は本当に複雑な問題を解決しない。私は後でその理由を示すために質問を編集します。 –