使用包含运算符或等效

时间:2017-11-03 10:39:26

标签: sas contain

SAS中的

如何在有多组字母可供选择时使用包含(或替代)运算符。例如,其中have_variable = abd,afg,afd,acc和want_variable = abd,afg,afd(仅包含ab或af)

3 个答案:

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