Разбор HTML данных в SAS - PullRequest
       29

Разбор HTML данных в SAS

0 голосов
/ 29 мая 2020

Привет, я пользователь R, и я впервые пытаюсь проанализировать данные HTML в SAS. Мне удалось получить информацию в текстовом файле, а затем прочитать файл, используя приведенные ниже строки, но я не могу проанализировать данные:

filename src "D:\testwebpage.txt";
proc http
 method="GET"
 url="xxxxx/yyyyyy"
 out=src;
run;

data rep;
infile src length=len lrecl=32767;
input line $varying32767. len;
line = strip(line);
if len>0;
run;

Данные в «rep» выглядят так:

<html><body style='font-family:arial'><style type="text/css">tr.head {

background-color: #FFFFFF;

font-weight: bold;

}

tr.even {background-color: #EEEEEE}

tr.odd {background-color: #FFFFFF}</style><table><tr class="head"><td>station_no</td><td>ts_path</td><td>parametertype_name</td></tr>

<tr class="even"><td>23349</td><td>17/23349/path1</td><td>WL</td></tr>

<tr class="odd"><td>23349</td><td>17/23349/path2</td><td>WL</td></tr>

<tr class="even"><td>23349</td><td>17/23349/path3</td><td>WL</td></tr>

<tr class="odd"><td>23349</td><td>17/23349/path4</td><td>WL</td></tr>

<tr><th colspan="3"><img src="images/path.gif" align="right"/>

</th></tr>

</table>

</body></html>

Мне нужно проанализировать «rep» и получить набор данных со станцией_no (в данном случае 23349), ts_path (17/23349 / path1 ....) и параметромtype_name (WL). Может ли кто-нибудь помочь мне в этом? Как я уже сказал, я не использую SAS и очень мало о нем знаю.

Спасибо.

1 Ответ

0 голосов
/ 29 мая 2020

HTML может быть немного сложно разобрать в зависимости от того, что вы пытаетесь прочитать. У меня есть только базовое c понимание HTML, но я мог определить несколько шаблонов, чтобы они были прочитаны. Я подошел к этому следующим образом:

  • Удалить теги HTML и заменить их с пробелами, используя PERL Регулярные выражения
  • Проверьте строку заголовка таблицы в HTML, проверив, содержит ли она ключевое слово. В этом случае я использовал station_no.
  • Если предыдущая строка была строкой заголовка, и эта строка не пропала после удаления тегов HTML, то сейчас мы находимся в строке данных
  • Возьмите каждое из необходимых нам значений, используя scan()

Если вы хотите увидеть, как работает logi c, удалите операторы keep и if(), чтобы вывести все строки -by-line.

data rep;
    infile src length=len lrecl=32767;
    input line $varying32767. len;

    line        = strip(line);

    /* PERL regular expression to remove HTML tags.
       compbl() changes multiple spaces into one space
    */
    line_notags = compbl(prxchange('s/<[^>]*>/ /', -1, line));

    if(len>0);

    /* Do not reset these values at the start of each row */
    retain flag_table_header lag_flag_table_header;

    /* Set a flag that we've encountered the table header */
    if(index(line, 'station_no')) then flag_table_header = 1;

    /* Check if we are currently under the table header */
    lag_flag_table_header = lag(flag_table_header);

    /* If we're under the table header and the line isn't missing after removing tags,
       grab what we need and output. Do not output if anything else is missing.
    */
    if(lag_flag_table_header AND NOT missing(line_notags) ) then do;
        station_no         = scan(line_notags, 1, ' ');
        ts_path            = scan(line_notags, 2, ' ');
        parametertype_name = scan(line_notags, 3, ' ');

        output;
    end;

    keep station_no ts_path parametertype_name;
run;

Самое важное, что нужно помнить при использовании языка шагов данных SAS, - это то, что он по своей сути является языком цикла. Программа, которую вы пишете, выполняет все действия для каждой строки набора данных. Каждый раз, когда программа встречает оператор run, SAS переходит к новой строке и сбрасывает все ваши столбцы на отсутствующие, чтобы подготовиться к чтению следующей строки. Вы можете разрешить столбцу сохраняться между чтениями с помощью оператора retain.

Познакомьтесь с концепцией вектора программных данных (PDV). Это действительно поможет вам понять язык шагов данных и то, как он обрабатывает вещи. Об этом есть действительно отличный пост сообщества здесь . После того, как вы освоите его, вы можете переключаться между SQL, шагами данных и процедурами для написания гибких программ, которые могут обрабатывать чудовищные наборы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...