Разбор XML в SAS имеет множество потенциальных маршрутов, в зависимости от конкретной структуры XML-файла, желаемых результатов и ваших возможностей.
Если вы можете создать XML-карту и использовать механизм XML-имени в качестве первого параметра. Это очень мощный и очень полезный. Если у вас нет утилиты XML Mapper (свободно распространяемой с большинством установок SAS, но если ваш_записчик не устанавливает ее, то вы не можете ее скачать); ссылка, например, для 9.2, равна here; ваша конкретная версия будет иметь тот же вид страницы и ссылки. Или попросите представителя технической поддержки SAS.
Если по какой-либо причине это невозможно, вы также можете создать свою собственную XML-карту; для этого есть инструкции в Интернете. Он использует XSL, который очень эффективен для сопоставления столбцов с наборами данных без необходимости искать вещи вручную.
Если это не сработает, то разбор текста возможен несколькими способами.
Во-первых, ваш метод выше, вероятно, самый медленный, но работает (используя FIND). Некоторые улучшения включают использование SCAN и маркировку "<>"
в качестве разделителей.
Во-вторых, вы можете использовать @"<score>"
с именем input; это очень мощный и позволяет вам действовать так, как если бы <score>
был вашим разделителем строк/полей. Вы также в более поздних версиях SAS можете использовать опцию DLMSTR=
в имени файла и буквально использовать ее в качестве разделителя.
В-третьих, вы можете использовать регулярные выражения. PRXMATCH
и связанные с ними помогут здесь, так как некоторые из них способны итеративно искать (найти совпадение 1, затем сопоставить 2, затем ...). Они не идеальны, но в ограниченных ситуациях они отлично работают. Однако их немного сложно изучить, и я, конечно, не собираюсь делать учебник здесь.
Я думаю, что в вашем вышеприведенном случае метод ввода прост; см., например, следующее.
data test;
input @"<score>" score 2. @@;
datalines;
<score>25</score><score>72</score><score>43</score>
;;;;
run;
Очевидно, что у вас могут быть проблемы, но это работает, по крайней мере, в этом конкретном примере.
Вы пробовали инструмент XML Mapper SAS? Он включен в Base SAS. – Reeza