Что такое решение для проверки, если строка содержит конкретную подстроку в SAS? - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь выяснить, как проверить на шаге SAS DATA, содержится ли значение переменной в строке. Допустим, у меня есть следующее:

Variable='some string'

String='ABC;EFG;IJKL;MNOPQ'.

Я хочу создать тест, возвращающий «ОК», если:

  • Variable = 'ABC'

  • переменная = 'EFG'

  • Плавающая = 'IJKL'

  • Плавающая = 'MNOPQ'

В противном случае возвращается «НЕ ОК»;

У меня есть следующий код:

FIND(String,TRIM(Variable)) GE 1 THEN PUT 'OK';

Предыдущая строка вернула бы тест, если

Variable = 'AB' ;

Variable = 'G;IJKL;M' ;

Variable = ';' ;

...

Чего я не хочу.

Есть идеи? Спасибо

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Используйте функцию FINDW ().Вы можете сказать, какие символы используются для обозначения конца слов.Вы также можете использовать опции модификатора, чтобы сказать ему, чтобы он автоматически обрезал конечные пробелы и / или игнорировал регистр.Он вернет местоположение в строке, где было найдено значение переменной.

location=findw("ABC;EFG;IJKL;MNOPQ",var,';','t');

, где 0 означает, что оно не найдено.Поскольку SAS будет рассматривать любое ненулевое значение как истинное, вы можете просто использовать результат в выражении IF.

if findw("ABC;EFG;IJKL;MNOPQ",var,';','t') then put var 'FOUND';
else put var 'NOT FOUND';
1 голос
/ 24 апреля 2019

Следующий код использует indexw(), используя ';' в качестве разделителя слов:

data have;
   string   = 'ABC;EFG;IJKL;MNOPQ';
   input variable $;
   datalines4;
ABC
EFG
IJKL
MNOPQ
AB
G;IJKL;M
;
;;;;

data want;
   set have;

   length result $ 8;
   result = ifc(indexw(string,strip(variable),';'),'OK','NOT OK');
run;
...