PROC SQL like 运算符

Posted

技术标签:

【中文标题】PROC SQL like 运算符【英文标题】:PROC SQL like operator 【发布时间】:2014-02-21 22:51:51 【问题描述】:

我只是想知道是否有一种方法可以为变量实现一个带有 % 符号的like。我基本上希望区域包含市场和任何其他字符以进行匹配。例如,如果 REGION = ALBANY-SXSX-TVTV 和 market=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*/ 

【问题讨论】:

@BellevueBob 我认为 this 是您在纯 SQL 中寻找的内容。 @agstudy 完美!现在有了解决方案。 【参考方案1】:

根据 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!感谢这个可重现的解决方案!我会在最终输出中添加市场变量select a.*, b.Code,b.market 以使解决方案更清晰。【参考方案2】:

只需使用连接:

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

更新为使用 SAS 连接函数和字符串值的双引号。

【讨论】:

你确定这行得通吗?我试过这个并得到一个错误。请记住,我使用的是 SAS。 你试过用单引号代替吗? SAS 通常会尝试解析双引号内的 % 符号。

以上是关于PROC SQL like 运算符的主要内容,如果未能解决你的问题,请参考以下文章

类似于 SQL“like”的 JavaScript 运算符 [重复]

SQL学习——LIKE运算符

如何在 SLICK 中使用 SQL“LIKE”运算符

Cloud Firestore 中的 SQL LIKE 运算符?

Like和'='等于sql中的运算符性能 - mysql集群

在sql代码中使用Like运算符。语法错误