如果SAS满足任何多个字符串要求,则为其赋值

时间:2015-03-31 15:38:31

标签: if-statement find sas

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语句中的任何字符串,并在命中时分配一个标志。 理想情况下,我想将此字符串指向一个单独的数据集,我可以即时更新,但我不太确定我知道该怎么做。 任何帮助将不胜感激。

谢谢!

3 个答案:

答案 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;