BookmarkSubscribeRSS Feed
SASPhile
Quartz | Level 8


As a first step towards data cleaning:

How to get the counts of following where there just hypens before @ in email addresses:

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

6 REPLIES 6
Haikuo
Onyx | Level 15

You will probably need some Regular expression:

data have;

  input email :$char100.;

  cards;

  [email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

;

data want;

set have;

  if prxmatch("/^-+@/",email) then ind=1;

run;

proc print;run;

Haikuo

Astounding
PROC Star

One way:

proc freq data=have;

tables email;

where index(email, '----');

run;

It will print a table based on any email addresses that contain four dashes in a row, anywhere within the address.  If you want to cut it to less than 4, that's up to you.  You know your data best.

Good luck.

Haikuo
Onyx | Level 15

I had to ask, what if you want to keep:

[email protected]

but to drop:

[email protected]?

I still think the Regular expression is the way to go, at least for the first step.

my 2 cents,

Haikuo

Astounding
PROC Star

I suppose I could switch from this:

index(email, '----')

to this:

index(email, '-@')

art297
Opal | Level 21

: Since you wanted strings that start with any number of hyphens, then followed with an @, I'll suggest adding one more character to Haikuo's code.  The ^ at the beginning forces the match to have occurred at the start of the string:

data have;

  informat email $50.;

  input email;

  cards;

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

;

data want;

  set have;;

  if prxmatch("/^-+@/",email) then ind=1;

run;

DBailey
Lapis Lazuli | Level 10

DATA WANT;

SET HAVE;

if index(email,'@')-1 = countc(substr(email,1,index(email,'@')-1),'-');

run;

CFC_SAS_Communities_400x225.jpg

Call for content now open!

It's your turn to help shape SAS Innovate 2027. Share your expertise and inspire the SAS community.

Submit your proposal →

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
  • 6 replies
  • 4598 views
  • 1 like
  • 5 in conversation