如何在有多组字母可供选择时使用包含(或替代)运算符。例如,其中have_variable = abd,afg,afd,acc和want_variable = abd,afg,afd(仅包含ab或af)
答案 0 :(得分:2)
我将你的必需列表分成两个表,其中包含多个记录,然后将其连接到有列表以找到匹配的表。
The final table will look like this
/* Create your input String */
data Have;
have="abd , afg , afd , acc";
run;
data Want ;
want="abd , afg , afd";
run;
/* Splint Input strings into Multiple Rows */
data Have_List;
set Have;
do i=1 by 0;
source=lowcase(scan(have,i,','));
if missing(source) then leave;
output;
i+1;
end;
keep source ;
run;
data Want_List;
set Want;
do i=1 by 0;
lookup=lowcase(scan(want,i,','));
if missing(lookup) then leave;
match='match';
output;
i+1;
end;
keep lookup match;
run;
/* Create a SQL left join to lookup the matching values */
proc sql;
create table match as
select h.source as have , COALESCE(w.match,"no-match") as match
from have_list h left join want_list w on h.source=w.lookup;
quit;
答案 1 :(得分:0)
您可以在select语句中使用列表。
就像那样:
proc sql;
select * from my_table where have_variable in ('abd','afg','afd','acc') and want_variable in ('abd','afg','afd');
run;
quit;
您甚至可以在数据集语句中使用in运算符,如下所示:
data want;
set mydate;
if have_variable in ('abd','afg','afd','acc') and
want_variable in ('abd','afg','afd');
run;
如果要获取仅包含2个字母的变量,可以使用LIKE:
proc sql;
select * from my_table where have_variable like '%ab%' or have_variable like '%af%';
run;
在数据集中:
data want;
set mydate;
where have_variable like '%ab%' or
have_variable like '%af%';
run;
此致
答案 2 :(得分:0)
如果您只想要以ab或af开头的记录(而不是在字符串中的任何位置包含它们),那么您可以in
后跟:
。通过这种用法,冒号指示SAS仅搜索字符串中的前n个字母,其中n是比较的长度(在您的示例中为2)。
请注意,这仅适用于datastep,而非proc sql
。
data have;
input have_var $;
datalines;
abd
afg
afd
acc
;
run;
data _null_;
set have;
where have_var in: ('ab','af');
put _all_;
run;