我只是想知道是否有办法用变量的%符号来实现。我基本上希望区域包含市场和任何其他字符以便匹配。一个例子是如果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*/
答案 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连接函数,并使用双引号作为字符串值。