SAS Programming

DATA Step, Macro, Functions and more
BookmarkSubscribeRSS Feed
carl_miles
Obsidian | Level 7

Hi Folks,

My given data set 

data mixed_data;
  length mixed_variable $20.;
  
  input mixed_variable $20.;
  datalines;
aB#5dH0p2Lq8R!xJ7sE9
3kFy@6u1oPwQvZr4Xb2
s9TgY0o2I!qLw5mH8xN7
dC4pL!aB9eR2o7Xn1yH6
6fWvGm9@jP3tNqLr1iH2
bS5lE7dR0oA1!xQ8zC3
Kp2Jr!L6yFw7XsNv9H0e
4uO9rH#tWq1E7sY2cL6
xZ3yF2!iQ8vS0l1Hr7nG
5pA1!mQ9o2W8rHl3vC6
;
run;

proc print data=mixed_data;
run;

i want keep only character(alphabets) and numbers only and remove other characters and including spaces

I used function Compress(mixed_variable, ,sakkd);
however s - to remove spaces
ak - to keep alphabets 
kd - to keep numbers 
are there any other way?

I am not sure of sakkd function my output if fine but i want make sure its does a right job I want other ways and validation as well 

3 REPLIES 3
PaigeMiller
Diamond | Level 26

I would think the final argument to COMPRESS would be 'adk'

--
Paige Miller
A_Kh
Barite | Level 11
  New_Var=compress(mixed_variable, '', 'p');

To remove any punctuation or special characters

Tom
Super User Tom
Super User

If space are important then include some spaces in the test data.

data mixed_data;
  input mixed_variable $20.;
  datalines;
aB#5dH0p2Lq8R!xJ7sE9
3kFy @6u1oPwQvZr4Xb2
s9TgY0o2I!qLw5mH8xN7
dC4pL!aB9eR2o7Xn1yH6
6fWvGm9@jP3tNqLr1iH2
bS5lE 7dR0oA1!xQ8zC3
Kp2Jr!L6yFw7XsNv9H0e
4uO9rH# tWq1E7sY2cL6
xZ3yF2!iQ8vS0l1Hr7nG
5pA1!m    Hl3 v   C6
;

It sounds like you are saying you want to eliminate everything except digits letters and spaces.

data want;
  set mixed_data;
  want = compress(mixed_variable,' ','kad');
run;

Which will generate:

Obs       mixed_variable              want

  1    aB#5dH0p2Lq8R!xJ7sE9    aB5dH0p2Lq8RxJ7sE9
  2    3kFy @6u1oPwQvZr4Xb2    3kFy 6u1oPwQvZr4Xb2
  3    s9TgY0o2I!qLw5mH8xN7    s9TgY0o2IqLw5mH8xN7
  4    dC4pL!aB9eR2o7Xn1yH6    dC4pLaB9eR2o7Xn1yH6
  5    6fWvGm9@jP3tNqLr1iH2    6fWvGm9jP3tNqLr1iH2
  6    bS5lE 7dR0oA1!xQ8zC3    bS5lE 7dR0oA1xQ8zC3
  7    Kp2Jr!L6yFw7XsNv9H0e    Kp2JrL6yFw7XsNv9H0e
  8    4uO9rH# tWq1E7sY2cL6    4uO9rH tWq1E7sY2cL6
  9    xZ3yF2!iQ8vS0l1Hr7nG    xZ3yF2iQ8vS0l1Hr7nG
 10    5pA1!m    Hl3 v   C6    5pA1m    Hl3 v   C6

If you also want to eliminate spaces then do not put anything at all for the second argument.

  want = compress(mixed_variable,,'kad');

Or put some character you DO want to keep in the second argument.

data want;
  set mixed_data;
  want = compress(mixed_variable,'A','kad');
run;

 

sas-innovate-white.png

Our biggest data and AI event of the year.

Don’t miss the livestream kicking off May 7. It’s free. It’s easy. And it’s the best seat in the house.

Join us virtually with our complimentary SAS Innovate Digital Pass. Watch live or on-demand in multiple languages, with translations available to help you get the most out of every session.

 

Register now!

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
  • 2282 views
  • 1 like
  • 4 in conversation