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
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;
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 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;
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;
that works too. Thanks Ksharp
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
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.
Ready to level-up your skills? Choose your own adventure.