<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic extract the city name from Address variable in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/extract-the-city-name-from-Address-variable/m-p/566577#M159255</link>
    <description>&lt;P&gt;Dear all,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would like to extract the city name from Address variable. for following table 1,&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;company_nmae&lt;/TD&gt;&lt;TD&gt;country&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;person_address&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2K POLYMER SYSTEMS&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;GB&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;21 Warple Way, Aberdeen X&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2K POLYMER SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;21 Warple Way,Aberdeen, Greater London W3 0RX&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S AIRCHANGERS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Brighton &amp;amp; Hove BT27 6UB&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S AIRCHANGERS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Kingston upon Hull BT27 6UB&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S-SOPHISTICATED SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;10 Cromwell Place Stoke-on-Trentn, SW7 2JN&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S-SOPHISTICATED SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;10 Cromwell Place, St. Albansn SW7 2JN&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;I expect to get&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;company_nmae&lt;/TD&gt;&lt;TD&gt;country&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;person_address&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;City&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2K POLYMER SYSTEMS&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;GB&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;21 Warple Way, Aberdeen X&lt;/TD&gt;&lt;TD&gt;Aberdeen&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2K POLYMER SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;21 Warple Way,Aberdeen, Greater London W3 0RX&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;London&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2K POLYMER SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;21 Warple Way,Aberdeen, Greater London W3 0RX&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Aberdeen&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S AIRCHANGERS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Brighton &amp;amp; Hove BT27 6UB&lt;/TD&gt;&lt;TD&gt;Brighton &amp;amp; Hove&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S AIRCHANGERS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Kingston upon Hull BT27 6UB&lt;/TD&gt;&lt;TD&gt;Kingston upon Hull&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S-SOPHISTICATED SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;10 Cromwell Place Stoke-on-Trentn, SW7 2JN&lt;/TD&gt;&lt;TD&gt;Stoke-on-Trentn&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S-SOPHISTICATED SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;10 Cromwell Place, St. Albansn SW7 2JN&lt;/TD&gt;&lt;TD&gt;St. Albansn&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have two datasets, the COMPANY dataset includes person_address information, the CITY dataset includes city information. I would like to create a new variable in the COMPANY dataset and extract city name from 'person_address' variable based on 'city' variable (which stores in CITY dataset).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Especially, if a person_address stings both include two city name, I expect to extract both of them. for example for value '21 Warple Way,Aberdeen, Greater London W3 0RX', I expect to extract both&amp;nbsp;&lt;STRONG&gt;London &lt;/STRONG&gt;and&amp;nbsp;&lt;STRONG&gt;Aberdeen.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;However, by using the code like below,&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA company;
    LENGTH
        company_nmae     $ 24
        country          $ 2
        person_address   $ 64 ;
    FORMAT
        company_nmae     $CHAR24.
        country          $CHAR2.
        person_address   $CHAR64. ;
    INFORMAT
        company_nmae     $CHAR24.
        country          $CHAR2.
        person_address   $CHAR64. ;
    INFILE DATALINES4
        DLM='7F'x
        MISSOVER
        DSD ;
    INPUT
        company_nmae     : $CHAR24.
        country          : $CHAR2.
        person_address   : $CHAR64. ;
DATALINES4;
2K POLYMER SYSTEMS&amp;#127;GB&amp;#127;21 Warple Way, Aberdeen X&amp;#127; 
2K POLYMER SYSTEMS&amp;#127;GB&amp;#127;21 Warple Way,Aberdeen, Greater London W3 0RX
2S AIRCHANGERS&amp;#127;GB&amp;#127;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Brighton &amp;amp; Hove BT27 6UB
2S AIRCHANGERS&amp;#127;GB&amp;#127;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Kingston upon Hull BT27 6UB
2S-SOPHISTICATED SYSTEMS&amp;#127;GB&amp;#127;10 Cromwell Place Stoke-on-Trentn, SW7 2JN
2S-SOPHISTICATED SYSTEMS&amp;#127;GB&amp;#127;10 Cromwell Place, St. Albansn SW7 2JN
;;;;
run;

data city;
  infile datalines truncover;
  input city $50.;
  datalines;
London
Aberdeen
Brighton &amp;amp; Hove
Kingston upon Hull
Lancaster
Newcastle upon Tyne
St Albans
Stoke-on-Trent
;
run;

data sample(drop=_:);
  set company;
  if _n_=1 then 
    do;
      dcl hash h1();
      h1.defineKey('city');
      h1.defineData('city');
      h1.defineDone();
      do until(done);
        set city end=done;
        h1.ref(key:upcase(city), data:city);
      end;
    end;
  
  call missing(city);
  _word_cnt=countw(person_address);
  _person_addr_upcase=upcase(person_address);
  do _i=_word_cnt to 1 by -1;
    if h1.find(key:scan(_person_addr_upcase,_i))=0 then leave;
  end;
run;

proc print data=sample;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;I can only get&amp;nbsp;&lt;/P&gt;&lt;DIV class="branch"&gt;&lt;DIV align="center"&gt;Obs company_nmae country person_address city123456 &lt;TABLE cellspacing="0" cellpadding="5"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;2K POLYMER SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;21 Warple Way, Aberdeen X&lt;/TD&gt;&lt;TD&gt;Aberdeen&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2K POLYMER SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;21 Warple Way,Aberdeen, Greater London W3 0RX&lt;/TD&gt;&lt;TD&gt;London&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S AIRCHANGERS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Brighton &amp;amp; Hove BT27 6UB&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S AIRCHANGERS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Kingston upon Hull BT27 6UB&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S-SOPHISTICATED SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;10 Cromwell Place Stoke-on-Trentn, SW7 2JN&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S-SOPHISTICATED SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;10 Cromwell Place, St. Albansn SW7 2JN&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;How can I fix it? Could you please give me some suggestions about this?&lt;/P&gt;&lt;P&gt;thanks in advance&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
    <pubDate>Mon, 17 Jun 2019 14:20:49 GMT</pubDate>
    <dc:creator>Alexxxxxxx</dc:creator>
    <dc:date>2019-06-17T14:20:49Z</dc:date>
    <item>
      <title>extract the city name from Address variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/extract-the-city-name-from-Address-variable/m-p/566577#M159255</link>
      <description>&lt;P&gt;Dear all,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would like to extract the city name from Address variable. for following table 1,&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;company_nmae&lt;/TD&gt;&lt;TD&gt;country&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;person_address&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2K POLYMER SYSTEMS&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;GB&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;21 Warple Way, Aberdeen X&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2K POLYMER SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;21 Warple Way,Aberdeen, Greater London W3 0RX&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S AIRCHANGERS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Brighton &amp;amp; Hove BT27 6UB&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S AIRCHANGERS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Kingston upon Hull BT27 6UB&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S-SOPHISTICATED SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;10 Cromwell Place Stoke-on-Trentn, SW7 2JN&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S-SOPHISTICATED SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;10 Cromwell Place, St. Albansn SW7 2JN&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;I expect to get&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;company_nmae&lt;/TD&gt;&lt;TD&gt;country&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;person_address&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;City&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2K POLYMER SYSTEMS&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;GB&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;21 Warple Way, Aberdeen X&lt;/TD&gt;&lt;TD&gt;Aberdeen&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2K POLYMER SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;21 Warple Way,Aberdeen, Greater London W3 0RX&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;London&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2K POLYMER SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;21 Warple Way,Aberdeen, Greater London W3 0RX&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Aberdeen&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S AIRCHANGERS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Brighton &amp;amp; Hove BT27 6UB&lt;/TD&gt;&lt;TD&gt;Brighton &amp;amp; Hove&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S AIRCHANGERS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Kingston upon Hull BT27 6UB&lt;/TD&gt;&lt;TD&gt;Kingston upon Hull&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S-SOPHISTICATED SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;10 Cromwell Place Stoke-on-Trentn, SW7 2JN&lt;/TD&gt;&lt;TD&gt;Stoke-on-Trentn&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S-SOPHISTICATED SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;10 Cromwell Place, St. Albansn SW7 2JN&lt;/TD&gt;&lt;TD&gt;St. Albansn&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have two datasets, the COMPANY dataset includes person_address information, the CITY dataset includes city information. I would like to create a new variable in the COMPANY dataset and extract city name from 'person_address' variable based on 'city' variable (which stores in CITY dataset).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Especially, if a person_address stings both include two city name, I expect to extract both of them. for example for value '21 Warple Way,Aberdeen, Greater London W3 0RX', I expect to extract both&amp;nbsp;&lt;STRONG&gt;London &lt;/STRONG&gt;and&amp;nbsp;&lt;STRONG&gt;Aberdeen.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;However, by using the code like below,&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA company;
    LENGTH
        company_nmae     $ 24
        country          $ 2
        person_address   $ 64 ;
    FORMAT
        company_nmae     $CHAR24.
        country          $CHAR2.
        person_address   $CHAR64. ;
    INFORMAT
        company_nmae     $CHAR24.
        country          $CHAR2.
        person_address   $CHAR64. ;
    INFILE DATALINES4
        DLM='7F'x
        MISSOVER
        DSD ;
    INPUT
        company_nmae     : $CHAR24.
        country          : $CHAR2.
        person_address   : $CHAR64. ;
DATALINES4;
2K POLYMER SYSTEMS&amp;#127;GB&amp;#127;21 Warple Way, Aberdeen X&amp;#127; 
2K POLYMER SYSTEMS&amp;#127;GB&amp;#127;21 Warple Way,Aberdeen, Greater London W3 0RX
2S AIRCHANGERS&amp;#127;GB&amp;#127;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Brighton &amp;amp; Hove BT27 6UB
2S AIRCHANGERS&amp;#127;GB&amp;#127;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Kingston upon Hull BT27 6UB
2S-SOPHISTICATED SYSTEMS&amp;#127;GB&amp;#127;10 Cromwell Place Stoke-on-Trentn, SW7 2JN
2S-SOPHISTICATED SYSTEMS&amp;#127;GB&amp;#127;10 Cromwell Place, St. Albansn SW7 2JN
;;;;
run;

data city;
  infile datalines truncover;
  input city $50.;
  datalines;
London
Aberdeen
Brighton &amp;amp; Hove
Kingston upon Hull
Lancaster
Newcastle upon Tyne
St Albans
Stoke-on-Trent
;
run;

data sample(drop=_:);
  set company;
  if _n_=1 then 
    do;
      dcl hash h1();
      h1.defineKey('city');
      h1.defineData('city');
      h1.defineDone();
      do until(done);
        set city end=done;
        h1.ref(key:upcase(city), data:city);
      end;
    end;
  
  call missing(city);
  _word_cnt=countw(person_address);
  _person_addr_upcase=upcase(person_address);
  do _i=_word_cnt to 1 by -1;
    if h1.find(key:scan(_person_addr_upcase,_i))=0 then leave;
  end;
run;

proc print data=sample;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;I can only get&amp;nbsp;&lt;/P&gt;&lt;DIV class="branch"&gt;&lt;DIV align="center"&gt;Obs company_nmae country person_address city123456 &lt;TABLE cellspacing="0" cellpadding="5"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;2K POLYMER SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;21 Warple Way, Aberdeen X&lt;/TD&gt;&lt;TD&gt;Aberdeen&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2K POLYMER SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;21 Warple Way,Aberdeen, Greater London W3 0RX&lt;/TD&gt;&lt;TD&gt;London&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S AIRCHANGERS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Brighton &amp;amp; Hove BT27 6UB&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S AIRCHANGERS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Kingston upon Hull BT27 6UB&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S-SOPHISTICATED SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;10 Cromwell Place Stoke-on-Trentn, SW7 2JN&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2S-SOPHISTICATED SYSTEMS&lt;/TD&gt;&lt;TD&gt;GB&lt;/TD&gt;&lt;TD&gt;10 Cromwell Place, St. Albansn SW7 2JN&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;How can I fix it? Could you please give me some suggestions about this?&lt;/P&gt;&lt;P&gt;thanks in advance&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Mon, 17 Jun 2019 14:20:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/extract-the-city-name-from-Address-variable/m-p/566577#M159255</guid>
      <dc:creator>Alexxxxxxx</dc:creator>
      <dc:date>2019-06-17T14:20:49Z</dc:date>
    </item>
    <item>
      <title>Re: extract the city name from Address variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/extract-the-city-name-from-Address-variable/m-p/566700#M159309</link>
      <description>&lt;P&gt;I took a look at your logic and there appears to be a couple of reasons that you are getting the output you presented in your post.&lt;/P&gt;&lt;P&gt;1. In your SCAN function statement, you do not specify any details regarding delimiters. Which means it will use the default list of delimiters. This will cause a problem, since some of the city names contain these delimiter characters. For example, 'Brighton &amp;amp; Hove' contains the ampersand character. So when it scans by &lt;EM&gt;X&lt;/EM&gt; number of words from the back, it will first look for HOVE, and then on the next loop 'BRIGHTON', but never 'BRIGHTON AND HOVE' as needed. By making some slight modifications, we can eliminate this issue.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;2.Additionally, I made updates to the values in the city table to replace&amp;nbsp;blank spaces&amp;nbsp;between words with underscores. These spaces were also causing city names to be broken down into smaller chunks that didn't align with the values in the person address field.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;3.Different spellings/characters being used for the same city name between the two tables.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - For example: On the city table there is, 'St Albans'. But on the company table, that city appears as, 'St. Albansn'. There is an additional 'n' at the end&amp;nbsp;of the city name, a period after 'St' that does not exist for the value on the City table. So I cleaned the table name on the City table for this as well. Stoke-on-Trent also has a stray 'n' at the end of it on the Company table. These would be more database value issues that would need to be handled on that end as bad data entries etc. For the purposes of this code, I updated those two slightly to see how they could go through this code if spelled correctly.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;4.In order to show all iterations, specifically when two city names appear in the same 'person address', to appear as two separate observations on the output the 'LEAVE' statement needed to be updated to an 'OUTPUT'.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is the logic for the updated datasets as well as the updated city name identification Hash logic:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA company;
    LENGTH
        company_name     $ 24
        country          $ 2
        person_address   $ 64 ;
    FORMAT
        company_name     $CHAR24.
        country          $CHAR2.
        person_address   $CHAR64. ;
    INFORMAT
        company_name     $CHAR24.
        country          $CHAR2.
        person_address   $CHAR64. ;
    INFILE DATALINES4
/*        DLM='?'*/
		DLM='7F'x
        MISSOVER
        DSD ;
    INPUT
        company_name     : $CHAR24.
        country          : $CHAR2.
        person_address   : $CHAR64. ;
DATALINES4;
2K POLYMER SYSTEMS&amp;#127;GB&amp;#127;21 Warple Way, Aberdeen X&amp;#127; 
2K POLYMER SYSTEMS&amp;#127;GB&amp;#127;21 Warple Way, Aberdeen X
2K POLYMER SYSTEMS&amp;#127;GB&amp;#127;21 Warple Way,Aberdeen, Greater London W3 0RX
2S AIRCHANGERS&amp;#127;GB&amp;#127;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Brighton &amp;amp; Hove BT27 6UB
2S AIRCHANGERS&amp;#127;GB&amp;#127;BEECH HOUSE, 4 CARRICKNAVEAGH ROAD, Kingston upon Hull BT27 6UB
2S-SOPHISTICATED SYSTEMS&amp;#127;GB&amp;#127;10 Cromwell Place Stoke-on-Trent, SW7 2JN
2S-SOPHISTICATED SYSTEMS&amp;#127;GB&amp;#127;10 Cromwell Place, St. Albans SW7 2JN
;;;;
run;

data city;
  infile datalines truncover;
  input city $50.;
  datalines;
London
Aberdeen
Brighton &amp;amp; Hove
Kingston Upon Hull
Lancaster
Newcastle Upon Tyne
St. Albans
Stoke-on-Trent
;
run;

DATA WORK.CITY (RENAME=(CITY2=CITY));
	SET WORK.CITY;
	CITY2=TRANWRD(TRANWRD(TRANWRD(UPCASE(CITY),'. ','._'),' &amp;amp; ', '_&amp;amp;_'),' UPON ', '_UPON_');
	DROP CITY;
RUN;

DATA SAMPLE(DROP=_:);
  SET WORK.COMPANY;
  IF _n_=1 THEN DO;
      DCL HASH H1();
      H1.DEFINEKEY('City');
      H1.DEFINEDATA('City');
      H1.DEFINEDONE();
      DO UNTIL(DONE);
        SET WORK.CITY END=DONE;
        H1.REF(KEY:UPCASE(City), DATA:City);
      END;
    END;

	CALL MISSING(City);
	_Person_Addr_Upcase=TRANWRD(TRANWRD(TRANWRD(UPCASE(PERSON_ADDRESS),'. ','._'),' &amp;amp; ', '_&amp;amp;_'),' UPON ', '_UPON_');
	_Word_Cnt=COUNTW(_Person_Addr_Upcase);
	DO _i=_Word_Cnt TO 1 BY -1;
		IF H1.FIND(KEY:(SCAN(_Person_Addr_Upcase,_i,', ')))=0 THEN OUTPUT;
	END;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I hope this helps.&lt;/P&gt;</description>
      <pubDate>Mon, 17 Jun 2019 19:34:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/extract-the-city-name-from-Address-variable/m-p/566700#M159309</guid>
      <dc:creator>tsap</dc:creator>
      <dc:date>2019-06-17T19:34:18Z</dc:date>
    </item>
  </channel>
</rss>

