BookmarkSubscribeRSS Feed
thanikondharish
Fluorite | Level 6

id~class~section~mark~stagen~seq~test
101~class1~sectiona~~4~1~
101~class1~sectiona~fi~3~2~fi
101~class1~sectiona~~9~3~fi
101~class1~sectiona~~9~4~fi
101~class1~sectiona~~9~5~fi
101~class1~sectiona~last~6~6~last
101~class1~sectiona~~2~7~last
101~class1~sectiona~~3~8~last
101~class1~sectiona~fi~9~9~fi
101~class1~sectiona~~2~10~fi
101~class1~sectiona~~3~11~fi
101~class1~sectiona~~9~12~fi
101~class1~sectiona~last~2~13~last
101~class1~sectiona~~9~14~last
Note: delimiter is '~'

Hi I have one dataset like above and I have to create sequence number test wise 

By variables are id class section seq.

How to create one variable (repeating) output should be below 

for your ref:

id~class~section~mark~stagen~seq~test_repeating

101~class1~sectiona~~4~1~
101~class1~sectiona~fi~3~2~fi~1
101~class1~sectiona~~9~3~fi~2
101~class1~sectiona~~9~4~fi~3
101~class1~sectiona~~9~5~fi~4
101~class1~sectiona~last~6~6~last~1
101~class1~sectiona~~2~7~last~
101~class1~sectiona~~3~8~last~
101~class1~sectiona~fi~9~9~fi~1
101~class1~sectiona~~2~10~fi~2
101~class1~sectiona~~3~11~fi~3
101~class1~sectiona~~9~12~fi~4
101~class1~sectiona~last~2~13~last~1
101~class1~sectiona~~9~14~last~

only test='fi' values should go with sequence and test='last' only one number like above dataset

4 REPLIES 4
thanikondharish
Fluorite | Level 6
You can assume both TXT file or normally entered data
Shmuel
Garnet | Level 18

Next code is rested:

data have;
   infile datalines dlm='~' dsd truncover;
   input id class $ section $ mark $ stagen seq test $;
datalines;
101~class1~sectiona~~4~1~
101~class1~sectiona~fi~3~2~fi
101~class1~sectiona~~9~3~fi
101~class1~sectiona~~9~4~fi
101~class1~sectiona~~9~5~fi
101~class1~sectiona~last~6~6~last
101~class1~sectiona~~2~7~last
101~class1~sectiona~~3~8~last
101~class1~sectiona~fi~9~9~fi
101~class1~sectiona~~2~10~fi
101~class1~sectiona~~3~11~fi
101~class1~sectiona~~9~12~fi
101~class1~sectiona~last~2~13~last
101~class1~sectiona~~9~14~last
; run;

data want;
 set have;
  by ID class;
     retain test_repeating flag;
     if first.class then do;
	    test_repeating=.;
		flag=.;
	 end;
	 if test='fi' then do;
	    if flag=. then do; test_repeating = 1;  flag=1; end;
	    else test_repeating+1; 
	 end; else
	 if test='last' then do;
	    test_repeating=.; 
	    if flag = 1 then do; 
		    test_repeating=1; 
		    flag=.; 
		end;
	 end;
	 drop flag;
run;

ChrisNZ
Tourmaline | Level 20

This modifies the text file in place.

data _null_;  %* create text file;
  file "&wdir\test.txt";
  put '101~class1~sectiona~~4~1~';
  put '101~class1~sectiona~fi~3~2~fi';
  put '101~class1~sectiona~~9~3~fi';
  put '101~class1~sectiona~~9~4~fi';
  put '101~class1~sectiona~~9~5~fi';
  put '101~class1~sectiona~last~6~6~last';
  put '101~class1~sectiona~~2~7~last';
  put '101~class1~sectiona~~3~8~last';
  put '101~class1~sectiona~fi~9~9~fi';
  put '101~class1~sectiona~~2~10~fi';
  put '101~class1~sectiona~~3~11~fi';
  put '101~class1~sectiona~~9~12~fi';
  put '101~class1~sectiona~last~2~13~last';
  put '101~class1~sectiona~~9~14~last';
run;

data _null_;   %* alter text file;
  infile  "&wdir\test.txt" sharebuffers;
  input ;
  file  "&wdir\test.txt"; 
  if index(_INFILE_,'~fi') then do;
    N+1;
    LINE= cats(_INFILE_,'~',N); 
    put LINE; 
  end;
  if N & index(_INFILE_,'~last') then do;
    N=0;
    LINE= catt(_INFILE_,'~1');  
    put LINE;
  end;
run;

data _null_;  %* print text file;
  infile "&wdir\test.txt";
  input;
  put _infile_;
run;

 

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
  • 4 replies
  • 1105 views
  • 0 likes
  • 3 in conversation