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

hi,

 

I need to count times string "RE" appears in multicharacter string. String is always char.

 

Example:

Data_Want     Column_have_id     Column_have_string

 

2                               01                   NDCSPCRCBCSLAFDWIWOFDSPDERRDETDRECADETDRECA

1                               02                   ENDCSPCRCBCSLAFDWIWOFDSPDERRDETDRECADETD

1                               03                   ENDCSPCRCBCSLAFDWIWOFDSPDERRDETDRECADETD

0                               04                   ENDCSPCRCBCSLAFDWIWOFDSP

 

In the first string of data in the above example, "RE" is read twice. ("RE" should be captured as is, not "ER"...).

 

thank you

1 ACCEPTED SOLUTION

Accepted Solutions
RW9
Diamond | Level 26 RW9
Diamond | Level 26

Just loop over the characters 1 by 1, and if char + 1 = RE increment count:

data have;
  length s $2000;
  input s $;
datalines; 
NDCSPCRCBCSLAFDWIWOFDSPDERRDETDRECADETDRECA
ENDCSPCRCBCSLAFDWIWOFDSPDERRDETDRECADETD
;
run;

data want (drop=i);
  set have;
  count=0;
  do i=1 to lengthn(s)-1;
    if cats(char(s,i),char(s,i+1))="RE" then count=sum(count,1);
  end;
run;

View solution in original post

5 REPLIES 5
RW9
Diamond | Level 26 RW9
Diamond | Level 26

Just loop over the characters 1 by 1, and if char + 1 = RE increment count:

data have;
  length s $2000;
  input s $;
datalines; 
NDCSPCRCBCSLAFDWIWOFDSPDERRDETDRECADETDRECA
ENDCSPCRCBCSLAFDWIWOFDSPDERRDETDRECADETD
;
run;

data want (drop=i);
  set have;
  count=0;
  do i=1 to lengthn(s)-1;
    if cats(char(s,i),char(s,i+1))="RE" then count=sum(count,1);
  end;
run;
brulard
Pyrite | Level 9
this is very helpful, thanks again
data_null__
Jade | Level 19

@brulard wrote:

hi,

 

I need to count times string "RE" appears in multicharacter string. String is always char.

 

Example:

Data_Want     Column_have_id     Column_have_string

 

2                               01                   NDCSPCRCBCSLAFDWIWOFDSPDERRDETDRECADETDRECA

1                               02                   ENDCSPCRCBCSLAFDWIWOFDSPDERRDETDRECADETD

1                               03                   ENDCSPCRCBCSLAFDWIWOFDSPDERRDETDRECADETD

0                               04                   ENDCSPCRCBCSLAFDWIWOFDSP

 

In the first string of data in the above example, "RE" is read twice. ("RE" should be captured as is, not "ER"...).

 

thank you


The FIND function is a good choice for this problem.

 

data re;
   input s $80.;
   count=0;
   do x=1 by 0 until(f eq 0);
      f=find(s,'RE',x);
      if f then count+1;
      x=f+2;
      end;
   drop x f;
   cards;
NDCSPCRCBCSLAFDWIWOFDSPDERRDETDRECADETDRECA
ENDCSPCRCBCSLAFDWIWOFDSPDERRDETDRECADETD
ENDCSPCRCBCSLAFDWIWOFDSPDERRDETDRECADETD
ENDCSPCRCBCSLAFDWIWOFDSP
;;;;
   run;
proc print;
   run;

Capture.PNG

Ksharp
Super User
Can you use COUNT()?


data have;
  length s $2000;
  input s $;
datalines; 
NDCSPCRCBCSLAFDWIWOFDSPDERRDETDRECADETDRECA
ENDCSPCRCBCSLAFDWIWOFDSPDERRDETDRECADETD
;
run;

data want (drop=i);
  set have;
  count=0;
  do i=1 to lengthn(s)-1;
    if cats(char(s,i),char(s,i+1))="RE" then count=sum(count,1);
  end;
  
  c=count(s,'RE');
  
run;
proc print;run;


brulard
Pyrite | Level 9

that works too. Thanks Ksharp

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

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
  • 5 replies
  • 1427 views
  • 2 likes
  • 4 in conversation