Input
Pin       Address;
75008  Paris 8è
            Les Ulis Essonne
92330  Sceaux Hauts-de-Seine
93140  Bondy Seine-Saint-Denis
            Rungis
Expected Output
Pin        Address;
75008   Paris 8è Les Ulis Essonne
92330  Sceaux Hauts-de-Seine
93140  Bondy Seine-Saint-Denis Rungis
data have;
infile cards truncover;
input Pin       Address $40.;
cards;
75008  Paris 8è
    .        Les Ulis Essonne
92330  Sceaux Hauts-de-Seine
93140  Bondy Seine-Saint-Denis
   .         Rungis
;
data temp;
 set have;
 if not missing(pin) then group+1;
run;
data want;
 do until(last.group);
  set temp;
  by group;
  length want $ 400;
  if first.group then want_pin=pin;
  want=catx(' ',want,address);
 end;
 keep want_pin want;
run;
					
				
			
			
				
			
			
			
				
			
			
			
			
			
		What format is your source? Is it a text file? Something else?
This is a case for reading two lines at a time, but to hold the second line for re-reading. I.e. each line gets read twice: once to see if it should have its address concatenated with the prior (primary) line, and once as the primary line:
data want (drop=nxt_:);
  input @1 PIN $5.     @8 address &$40. 
      / @1 nxt_pin $5. @8 nxt_address &$20.  @@;
  if nxt_pin=' ' then address=catx(' ',address,nxt_address);
  if pin^=' ';
datalines;
75008  Paris 8è
       Les Ulis Essonne
92330  Sceaux Hauts-de-Seine
93140  Bondy Seine-Saint-Denis
       Rungis
run;
The double trainling @@ tells sas not to throw away the second line, so that it is available for re-reading when serving as the primary line.
data have;
infile cards truncover;
input Pin       Address $40.;
cards;
75008  Paris 8è
    .        Les Ulis Essonne
92330  Sceaux Hauts-de-Seine
93140  Bondy Seine-Saint-Denis
   .         Rungis
;
data temp;
 set have;
 if not missing(pin) then group+1;
run;
data want;
 do until(last.group);
  set temp;
  by group;
  length want $ 400;
  if first.group then want_pin=pin;
  want=catx(' ',want,address);
 end;
 keep want_pin want;
run;
					
				
			
			
				
			
			
			
			
			
			
			
		It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
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.
