PROC类SQL运算符

PROC类SQL运算符,sql,sas,Sql,Sas,我只是想知道是否有一种方法可以实现一个变量带有%符号的like。我基本上希望该地区包含市场和任何其他字符有一个匹配。例如,如果REGION=ALBANY-SXSX-TVTV和market=ALBANY,我希望REGION和market之间存在匹配 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*/ 只需使用串联

我只是想知道是否有一种方法可以实现一个变量带有%符号的like。我基本上希望该地区包含市场和任何其他字符有一个匹配。例如,如果REGION=ALBANY-SXSX-TVTV和market=ALBANY,我希望REGION和market之间存在匹配

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*/ 

只需使用串联:

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

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

根据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函数。然而,猫不工作;要使用ps2goat的解决方案,必须使用CATS函数删除多余的空白。所以它也可以写成

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

还要注意单引号的使用;使字符为常量时,切勿使用双引号。双引号内的文本由宏处理器扫描以进行符号替换(百分比符号是一个触发器)。

您确定这会起作用吗。我试过了,但出了一个错误。请记住,我正在使用SAS。您是否尝试过使用单引号?SAS通常尝试在双引号内解析%符号。@BellevueBob我认为这就是纯SQL中所要寻找的。@agstudy Perfect!现在有解决方案了。+1!感谢您提供这种可复制的解决方案!我只想在最终输出中添加市场变量
选择a.*,b.code,b.market
,使解决方案更清晰。