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 $ .

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 10 replies
  • 22618 views
  • 2 likes
  • 7 in conversation