BookmarkSubscribeRSS Feed
user24
Obsidian | Level 7

How can i remove the data if the variable is not start with a letter. Should i type all the letter or any other short way

 

variable

 

 A153

B124

0564

.1548

na

w853

 

 

I want to keep only these variables. It should be 4 character long

 

variable

A153

B124

w853

10 REPLIES 10
PeterClemmensen
Tourmaline | Level 20

What about 'na'? That starts with a letter two?

 

Anyway, something like this

 

data have;
input variable $;
datalines;
 A153
B124
0564
.1548
na
w853
;

data want;
   set have;
   where substr(variable,1,1) not in ('0','1','2','3','4','5','6','7','8','9','.',' ');
run;
user24
Obsidian | Level 7
how can i remove if the character long not more than 4 or less than 4
RW9
Diamond | Level 26 RW9
Diamond | Level 26

Pretty sure your just pulling our leg now, we ask for test data in the form of a datastep every post.  As such this is just logic snippets:

data want;
  string="A153";
  isfirstalpha=ifn(lengthn(compress(char(string,1)," ","a")),0,1);
  islength=lengthn(string);
run;
Astounding
PROC Star

A short way:

 

if length(variable)=4 and anyalpha(variable)=1;

 

By using ANYALPHA, you don't have to guess what characters might arrive in the next batch of data.

RW9
Diamond | Level 26 RW9
Diamond | Level 26

Just to note its only the first character, so:

if length(variable)=4 and anyalpha(char(variable,1))=1; 

 

Good point about anyalpha() function, saves compress.

Astounding
PROC Star

No, the complications aren't needed. I stand by my original post.

 

ANYALPHA returns the position of the first alpha character.  So by checking that ANYALPHA returns a 1, that's enough.

Ksharp
Super User
data have;
input variable $;
datalines;
 A153
B124
0564
.1548
na
w853
;
data want;
 set have;
 if prxmatch('/^[a-z]\S{3}$/i',strip(variable));
run;
art297
Opal | Level 21

I think@Ksharp meant the following (to ensure that strings were only 4 characters long):

 

data have;
input variable $;
datalines;
 A153
B124xxx
d5555
0564
.1548
na
AAAA
w853
;
data want;
 set have;
 if prxmatch('/^[a-z][a-z0-9]{3}$/i',strip(variable));
run;

Art, CEO, AnalystFinder.com

 

Ksharp
Super User
Yeah.I forgot $ .
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
  • 10 replies
  • 25129 views
  • 2 likes
  • 7 in conversation