PROC SQL like运算符

时间:2014-02-21 22:51:52

标签: sql sas

我只是想知道是否有办法用变量的%符号来实现。我基本上希望区域包含市场和任何其他字符以便匹配。一个例子是如果REGION = ALBANY-SXSX-TVTV和市场= ALBANY,我希望区域和市场之间存在匹配。

select a.*, b.Code,b.HHLDS
from Master1 as a left join map as b
on a.region like "b.market%"; /*not sure about this*/ 

2 个答案:

答案 0 :(得分:6)

基于agstudy的评论,这里有一个非常类似ps2goat给出的解决方案,带有一些简单的样本数据:

data Master1;
   length region $30;
   input region;
   datalines;
ALBANY-SXSX-TVTV
ALBANY2-SXSX-TVTV
SEATTLE-SXSX-TVTV
NEWYORK-SXSX-TVTV
run;

data map;
   length market $10 code $1;
   input market code;
   datalines;
ALBANY A
SEATTLE B
run;

proc sql noprint;
   create table a as
   select a.*, b.Code
   from Master1 a 
   left join map b
   on a.region like '%' || trim(b.market) || '%';
quit;

请注意,这使用了连接运算符( || )而不是CAT函数。但是,CAT不起作用;要使用ps2goat的解决方案,必须使用CATS功能删除无关的空白。因此它也可以写成

   on a.region like CATS('%',b.market),'%');

还要注意使用单引号;在使字符不变时,永远不要使用双引号。宏处理器扫描双引号内的文本以进行符号替换(百分比符号为触发器)。

答案 1 :(得分:1)

只使用连接:

select a.*, b.Code,b.HHLDS
from Master1 as a left join map as b
on a.region like CAT("%",b.market,"%");

更新为使用SAS连接函数,并使用双引号作为字符串值。