2014-02-21 61 views
2

我只是想知道是否有一種方法來實現像變量%符號一樣。我基本上想要區域包含市場和任何其他角色,以便有一場比賽。一個例子是如果REGION = ALBANY-SXSX-TVTV和market = ALBANY,我想在那裏有地區和市場的匹配。PROC SQL像運算符

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

@BellevueBob我認爲[this](http://stackoverflow.com/questions/20484/use-a-like-clause-in-part-of-an-inner-join)是你正在尋找在純SQL中。 – agstudy

+0

@agstudy完美!現在有一個解決方案。 – BellevueBob

回答

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),'%'); 

另請注意使用單引號;製作字符常量時不要使用雙引號。宏處理器掃描雙引號內的文本以進行符號替換(並且百分號是觸發器)。

+0

+1!感謝這個可重現的解決方案!我只是在最終輸出'select a。*,b.Code,b.market'中添加市場變量以使解決方案更清晰。 – agstudy

1

只需使用串聯:

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

更新爲使用SAS級聯功能,以及雙引號的字符串值。

+0

你確定這會工作。我試過這個,並得到一個錯誤。請記住,我正在使用SAS。 – lord12

+0

編輯。讓我知道這是否有效。 – ps2goat

+0

您是否嘗試使用單引號? SAS通常會嘗試解析雙引號內的%符號。 – user667489