Как определить конкретные подслов в тексте - PullRequest
1 голос
/ 07 марта 2019

У меня есть столбец в виде строки без пробелов:

clear
input str100 var
"ihaveanewspaper"
"watchingthenewsonthetv"
"watchthenewsandreadthenewspaper"
end

Я использую следующую команду:

gen = regex,(var, "(news)")

Выводит 1 1 1, поскольку обнаруживает, что строки 3 в столбце var содержат слово news.

Я пытаюсь изменить регулярное выражение "(news)", чтобы создать два столбца. Один для новостей и один для газеты. regexm(var, "(newspaper)") удостоверяется, что в строке содержится газета, но мне нужна команда, чтобы символы после новостей не были "бумажными", так как я пытаюсь количественно их определить.


EDIT:

Есть ли способ считать третью запись как 1, потому что она имеет вхождение news, но не является газетой?

1 Ответ

3 голосов
/ 07 марта 2019

Вы можете определить количество следующим образом без регулярного выражения:

clear
input str100 var
"ihaveanewspaper"
"watchingthenewsonthetv"
"watchthenewsandreadthenewspaper"
"fdgdnews"
"fgogodigjhoigjnewspaper"
"fgeogeionnewsfgdgfpaper"
"45pap9358newsfjfgni"
end

generate news = strmatch(var, "*news*") & !strmatch(var, "*newspaper*")

list, separator(0)

     +----------------------------------------+
     |                             var   news |
     |----------------------------------------|
  1. |                 ihaveanewspaper      0 |
  2. |          watchingthenewsonthetv      1 |
  3. | watchthenewsandreadthenewspaper      0 |
  4. |                        fdgdnews      1 |
  5. |         fgogodigjhoigjnewspaper      0 |
  6. |         fgeogeionnewsfgdgfpaper      1 |
  7. |             45pap9358newsfjfgni      1 |
     +----------------------------------------+

count if news
4

count if !news
3

EDIT:

Один из способов сделать это - исключить все вхождения слова newspaper и повторить процесс:

generate var2 = subinstr(var, "newspaper", "", .)
replace news = 1 if strmatch(var2, "*news*")

list, separator(0)

     +------------------------------------------------------------------+
     |                             var   news                      var2 |
     |------------------------------------------------------------------|
  1. |                 ihaveanewspaper      0                    ihavea |
  2. |          watchingthenewsonthetv      1    watchingthenewsonthetv |
  3. | watchthenewsandreadthenewspaper      1    watchthenewsandreadthe |
  4. |                        fdgdnews      1                  fdgdnews |
  5. |         fgogodigjhoigjnewspaper      0            fgogodigjhoigj |
  6. |         fgeogeionnewsfgdgfpaper      1   fgeogeionnewsfgdgfpaper |
  7. |             45pap9358newsfjfgni      1       45pap9358newsfjfgni |
     +------------------------------------------------------------------+

count if news
5

count if !news
2
...