DATA Step, Macro, Functions and more

last word from right

Accepted Solution Solved
Reply
Super Contributor
Posts: 401
Accepted Solution

last word from right

 Hi,  I'm trying to find if there is a space after the last 3 digits then it's a canadian address otherwise it's US.

 

field

23 Yonge st.  M4H 6F7

23 Yonge st. 902910

827 Bla Bla Rd. T7G 7K2

Sammy Rd. 38278

 

where there is a postal code I'd say Canadian and 2 and 4 are US.. So I figured if there is a space after the last 3 digits from the right then it's  Can, otherwise US.

Thnks


Accepted Solutions
Solution
‎06-15-2017 09:46 PM
Trusted Advisor
Posts: 1,137

Re: last word from right

Please try perl as below

 

data want;
set have;
if prxmatch('m/\s\d\w\d$/',strip(field)) then flag='Can';
else flag='US';
run;
Thanks,
Jag

View solution in original post


All Replies
Solution
‎06-15-2017 09:46 PM
Trusted Advisor
Posts: 1,137

Re: last word from right

Please try perl as below

 

data want;
set have;
if prxmatch('m/\s\d\w\d$/',strip(field)) then flag='Can';
else flag='US';
run;
Thanks,
Jag
PROC Star
Posts: 1,760

Re: last word from right

[ Edited ]

You could use variations of:

 

if length(scan(ADDRESS,-1)) in (3,6) then COUNTRY='CANADA';

Super User
Posts: 19,792

Re: last word from right

A different option

 

1. Use COUNTW to determine the number of words

2. Find last word

3. If Length = 5 then it's US, otherwise, it's CAN.

 

The Perl is more efficient though

 

length country $8.;

n_words = countw(text);
last_word = scan(text, n_words);

if length(last_word)=3 then country = 'CAN';
else if length(last_word)=5 then country='US';
else country='CHECKME';
PROC Star
Posts: 325

Re: last word from right

something like this

data want;
set have;
if prxmatch("m/\s.{3}$/oi",trim(addr_ln_1))> 0 then cntry='CAN';
else cntry='US';
run;

☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 4 replies
  • 152 views
  • 3 likes
  • 5 in conversation