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语句能够在变量OWNER中搜索in语句中的任何字符串,并在命中时分配一个标志。 理想情况下,我想将此字符串指向一个单独的数据集,我可以即时更新,但我不太确定我知道该怎么做。 任何帮助将不胜感激。
谢谢!
答案 0 :(得分:2)
试试这个
If upcase(owner) in ('ADMIN', 'ASSOC', 'BANK', 'CHRIST', 'CHURCH', 'CITY')
Then NameFlag=1;
Else NameFlag=0;
答案 1 :(得分:2)
如果我正确理解您的问题,您要搜索的值是Owner变量中的子字符串,而不是整个值。如果是这种情况,那么您可以使用正则表达式函数prxmatch
来查找字符串。这样就可以对变量进行多次搜索,这是find
函数无法做到的。
我首先将搜索值分配给宏变量,以供日后使用。我不知道为什么你的代码中有NameExclusion变量,因为它与NameFlag的值完全相同
%let search_str = ADMIN|ASSOC|BANK|CHRIST|CHURCH|CITY;
data have;
input owner & $50.;
NameFlag = prxmatch("/\b(&search_str.)\b/",owner)>0; /*sets value to 1 if true, 0 if false */
datalines;
ADMIN CLERK
TEST VALUE
SOME BANK
THE CHURCH
CHURCHILL
INTERCITY
;
答案 2 :(得分:1)
要使其动态化,请使用带有值的数据集。
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;