If statement 如果变量满足多个字符串要求中的任何一个,则为其赋值

If statement 如果变量满足多个字符串要求中的任何一个,则为其赋值,if-statement,find,sas,If Statement,Find,Sas,我希望这个if语句在变量所有者中搜索in语句中的任何字符串,并在它命中时指定一个标志。 理想情况下,我想把这个字符串指向一个单独的数据集,我可以随时更新,但我不太确定我知道如何做到这一点。 任何帮助都将不胜感激 谢谢 试试这个 if find(upcase(owner,in('ADMIN'|'ASSOC'|'BANK'|'CHRIST'|'CHURCH'|'CITY'|))) THEN NameFlag = 1; ELSE NameFlag = 0; IF NameFlag > 0 the

我希望这个if语句在变量所有者中搜索in语句中的任何字符串,并在它命中时指定一个标志。 理想情况下,我想把这个字符串指向一个单独的数据集,我可以随时更新,但我不太确定我知道如何做到这一点。 任何帮助都将不胜感激

谢谢

试试这个

if find(upcase(owner,in('ADMIN'|'ASSOC'|'BANK'|'CHRIST'|'CHURCH'|'CITY'|)))
THEN NameFlag = 1;
ELSE NameFlag = 0;
IF NameFlag > 0 then NameExclusion=1;
else NameExclusion=0;
试试这个

if find(upcase(owner,in('ADMIN'|'ASSOC'|'BANK'|'CHRIST'|'CHURCH'|'CITY'|)))
THEN NameFlag = 1;
ELSE NameFlag = 0;
IF NameFlag > 0 then NameExclusion=1;
else NameExclusion=0;

要使其成为动态的,请使用具有值的数据集

If upcase(owner) in ('ADMIN', 'ASSOC', 'BANK', 'CHRIST', 'CHURCH', 'CITY')
 Then NameFlag=1;
Else NameFlag=0;

要使其成为动态的,请使用具有值的数据集

If upcase(owner) in ('ADMIN', 'ASSOC', 'BANK', 'CHRIST', 'CHURCH', 'CITY')
 Then NameFlag=1;
Else NameFlag=0;

如果我正确理解了您的问题,那么您正在搜索的值是Owner变量中的子字符串,而不是整个值。如果是这种情况,那么可以使用正则表达式函数prxmatch来查找字符串。这允许对一个变量进行多次搜索,这是find函数所不能做到的

我首先将搜索值分配给一个宏变量,供以后使用。我不知道为什么代码中有NameExclusion变量,因为它与NameFlag的值完全相同

data values;
informat value $24.;
input value $;
datalines;
ADMIN
ASSOC
BANK
CHRIST
CHURCH
CITY
;
run;

%put &values;

proc sql noprint;
select "'" || strip(value) || "'"
into :values separated by ','
from values;
quit;

data want;
set have;
If upcase(owner) in (&values)
 Then NameFlag=1;
Else NameFlag=0;
run;

如果我正确理解了您的问题,那么您正在搜索的值是Owner变量中的子字符串,而不是整个值。如果是这种情况,那么可以使用正则表达式函数prxmatch来查找字符串。这允许对一个变量进行多次搜索,这是find函数所不能做到的

我首先将搜索值分配给一个宏变量,供以后使用。我不知道为什么代码中有NameExclusion变量,因为它与NameFlag的值完全相同

data values;
informat value $24.;
input value $;
datalines;
ADMIN
ASSOC
BANK
CHRIST
CHURCH
CITY
;
run;

%put &values;

proc sql noprint;
select "'" || strip(value) || "'"
into :values separated by ','
from values;
quit;

data want;
set have;
If upcase(owner) in (&values)
 Then NameFlag=1;
Else NameFlag=0;
run;

关于第二个问题,我想有一个单独的参考数据集,包含所有可能的名称排除。也许可以通过类似infle语句的方式在datastep中访问它。关于第二个问题,我想有一个单独的参考数据集,包含所有可能的名称排除。也许可以通过类似infle语句的方式在datastep中访问它。类似于excel的索引数组。还可以为不区分大小写的匹配指定/i,这似乎是目的所在。此外,如果值存储在数据集中,则可以使用DomPazz的方法,通过“|”分隔,通过管道而不是逗号分隔。这与解决第一部分非常接近,但我无法编辑要在字符串中添加空格的实例,例如=“USA”|“CHURCH”|“CHRIST”。。。避免选择“苏珊”、“丘吉尔”或“克里斯托弗”,而只选择“美国银行家”或“新教堂”或“基督圣殿”。有什么想法吗?我已经更新了答案,在搜索字符串前后添加了/b。这意味着在搜索的单词前后必须有一个单词边界,也就是说,它只会拾取准确的单词,而不会拾取它在较大单词中出现的位置。还可以为不区分大小写的匹配指定/i,这似乎是目的所在。此外,如果值存储在数据集中,则可以使用DomPazz的方法,通过“|”分隔,通过管道而不是逗号分隔。这与解决第一部分非常接近,但我无法编辑要在字符串中添加空格的实例,例如=“USA”|“CHURCH”|“CHRIST”。。。避免选择“苏珊”、“丘吉尔”或“克里斯托弗”,而只选择“美国银行家”或“新教堂”或“基督圣殿”。有什么想法吗?我已经更新了答案,在搜索字符串前后添加了/b。这意味着在搜索的单词之前和之后必须有一个单词边界,即它只会拾取准确的单词,而不会拾取它在较大单词中出现的位置。你能详细介绍一下吗?在何处输入要搜索的字符串,在何处输入变量?将它们放入一个数据集中,我使用具有列名值的值。创建数据集的方法有很多,你能详细介绍一下吗?在何处输入要搜索的字符串,在何处输入变量?将它们放入一个数据集中,我使用具有列名值的值。有许多方法可以创建数据集。