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 运算符 [重复]
Cloud Firestore 中的 SQL LIKE 运算符?