我只是想知道是否有办法用变量的%符号来实现.我基本上希望区域包含市场和任何其他字符以便匹配.一个例子是如果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*/
Run Code Online (Sandbox Code Playgroud)
根据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;
Run Code Online (Sandbox Code Playgroud)
请注意,这使用了连接运算符(||)而不是CAT函数.但是,CAT不起作用; 要使用ps2goat的解决方案,必须使用CATS功能删除无关的空白.因此它也可以写成
on a.region like CATS('%',b.market),'%');
Run Code Online (Sandbox Code Playgroud)
还要注意使用单引号; 在使字符不变时,永远不要使用双引号.宏处理器扫描双引号内的文本以进行符号替换(百分比符号是触发器).