如果一个字符串包含SAS中的特定子字符串,那么测试该字符串的解决方案是什么?

如果一个字符串包含SAS中的特定子字符串,那么测试该字符串的解决方案是什么?,sas,Sas,我试图弄清楚如何在SAS数据步骤中测试字符串中是否包含变量值。 假设我有以下几点: Variable='some string' String='ABC;EFG;IJKL;MNOPQ'. 我想构建一个返回“OK”的测试,如果: 变量='ABC' 变量='EFG' 变量='IJKL' 变量='MNOPQ' 否则返回“不正常” 我有以下代码: FIND(String,TRIM(Variable)) GE 1 THEN PUT 'OK'; 如果出现以下情况,前一行将使测试返回OK Varia

我试图弄清楚如何在SAS数据步骤中测试字符串中是否包含变量值。 假设我有以下几点:

Variable='some string'

String='ABC;EFG;IJKL;MNOPQ'.
我想构建一个返回“OK”的测试,如果:

  • 变量='ABC'

  • 变量='EFG'

  • 变量='IJKL'

  • 变量='MNOPQ'

否则返回“不正常”

我有以下代码:

FIND(String,TRIM(Variable)) GE 1 THEN PUT 'OK';
如果出现以下情况,前一行将使测试返回OK

Variable = 'AB' ;

Variable = 'G;IJKL;M' ;

Variable = ';' ;

这不是我想要的

你知道吗?
谢谢

以下代码使用了
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;
使用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';