测试字符串在SAS中是否包含特定子字符串的解决方案是什么?

时间:2019-04-24 12:33:11

标签: sas

我试图找出如何在SAS DATA步骤中测试字符串中是否包含变量值。 假设我有以下内容:

Variable='some string'

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

在以下情况下,我想构建一个返回“确定”的测试

  • Variable ='ABC'

  • Variable ='EFG'

  • Variable ='IJKL'

  • Variable ='MNOPQ'

否则返回“ NOT OK”;

我有以下代码:

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

如果

,前一行将使测试返回OK。
Variable = 'AB' ;

Variable = 'G;IJKL;M' ;

Variable = ';' ;

...

那不是我想要的。

你有什么主意吗? 谢谢

2 个答案:

答案 0 :(得分:1)

以下代码利用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;

答案 1 :(得分:1)

使用FINDW()函数。您可以告诉它哪些字符用于标记单词的结尾。您还可以使用修饰符选项告诉它自动修剪尾随空格和/或忽略大小写。它将返回字符串中找到变量值的位置。

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

,值为0,表示未找到。由于SAS会将​​任何非零值都视为true,因此您只需在IF语句中使用结果即可。

if findw("ABC;EFG;IJKL;MNOPQ",var,';','t') then put var 'FOUND';
else put var 'NOT FOUND';