Тянуть строки до и после ключевых слов - PullRequest
1 голос
/ 15 января 2020

Не уверен, если это возможно в SAS; хотя я медленно изучаю почти все, что возможно в SAS ...

У меня есть набор данных 600 пациентов, и в этом наборе данных у меня есть переменная комментария. Переменная comment содержит несколько предложений, которые каждый пациент заявил о своем уходе. Например, набор данных выглядит следующим образом:

 ID        Comment
 1         Today we have great service. everyone was really nice.
 2         The customer service team did not know what they were talking about and was rude.
 3         Everyone was very helpful 5 stars.
 4         Not very helpful at all.
 5         Staff was nice.
 6         All the people was really nice.

Допустим, я определил количество ключевых слов, которые меня интересуют; например, хороший, грубый и полезный.

Есть ли способ получить 2 строки, которые идут перед этими словами, и создать таблицу частот?

 WORD            Frequency 
 Was Really Nice         2
 And Was Rude            1
 Was Very Helpful        1
 Not very helpful        1

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

 data PG_2 / view=PG_2;
 length word $20;
 set PG_1;
 do i = 1 by 1 until(missing(word));
 word = upcase(scan(COMMENT, i));
 if not missing(word) then output;
 end;
 keep word;
 run;

 proc freq data=PG_2 order=freq;
 table word / out=wordfreq(drop=percent);
 run;

1 Ответ

3 голосов
/ 15 января 2020

Посмотрели ли вы функции регулярного выражения perl ( PRX ) в SAS. Я думаю, что они могут решить вашу проблему.

Вы можете использовать группы захвата RegEx, чтобы извлечь два слова непосредственно перед вашим ключевым словом, используя prxparse и prxposn. Ниже следует взять любые два слова перед словом nice в переменной comment и добавить их в переменную firstTwoStrings.

data firstTwoStrings;
   length firstTwoStrings $200;
   retain re;
   if _N_ = 1 then
      re = prxparse('/(\w+ \w+) nice/'); /*change 'nice' to your desired keyword*/
   set comments;
   if prxmatch(re, COMMENT) then 
      do;
         firstTwoStrings = prxposn(re, 1, COMMENT);
      end;
run;
...