BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
sstac
Calcite | Level 5

I have a zip code variable in a dataset that includes both 5- and 9-digit zip codes. I want all of them to be 5-digits but am having trouble extracting the first 5 digits of the variable. It is an extensive list, but some examples are 15009, 15208, 191451652, 193760024.

 

When I try to use substr,

 

data cases; set cases;

zip=substr(zip_char,1,5);

run;

 

it seems to truncate the zip codes that are already 5 characters long to "1". Any thoughts on how to avoid this?

 

1 ACCEPTED SOLUTION

Accepted Solutions
Astounding
PROC Star

This would happen if ZIP_CHAR is not left-hand justified.  Luckily, it's easy to left-hand justify:

 

length zip $ 5;

zip = left(zip_char);

 

SUBSTR isn't really needed, once you have assigned a length to the new variable.

View solution in original post

3 REPLIES 3
LinusH
Tourmaline | Level 20
Perhaps your zip_char is right aligned.
Try to do left() prior to substr().
Data never sleeps
Astounding
PROC Star

This would happen if ZIP_CHAR is not left-hand justified.  Luckily, it's easy to left-hand justify:

 

length zip $ 5;

zip = left(zip_char);

 

SUBSTR isn't really needed, once you have assigned a length to the new variable.

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 75547 views
  • 2 likes
  • 4 in conversation