Help using Base SAS procedures

Help with SAS code which is in a loop

Reply
Frequent Contributor
Posts: 127

Help with SAS code which is in a loop

I am trying to read the email_list file and output only email addresses separated by semi-column.  But my code goes into a loop.

Can anybody help me in this??

 

email_file.txt has following records:

 

Doe, John <john.doe@abc.com>;Smith, Jeff <jeff.smith@abc.com>; lever, dave <dave.lever@abc.com>

 

 

Below is my code:

data test;
length text $32767;

infile 'c\email_file.txt' lrecl=32767 dsd dlm='09'x truncover;

input text $;

run;

data t1;
set test;
length tx3 $500;
tx3="";
tx1=text;
do until (length(cats(tx1))=0);
space_position = INDEX(tx1, '<');
slash_position = INDEX(tx1, '>');
space_to_slash = slash_position - space_position;
tx2 = substr(tx1, space_position+1, space_to_slash-1);
tx3=cats(tx3,tx2,";");
tx4=substr(tx1,find(tx1,";")+1);
tx1=tx4;
end;
run;

Trusted Advisor
Posts: 1,137

Re: Help with SAS code which is in a loop

data want;
i=1;
set have;
do until(scan(text,i,';') eq '');
new=scan(text,i,';');
i+1;
output;
end;
run;
Thanks,
Jag
Super User
Posts: 10,041

Re: Help with SAS code which is in a loop

filename x temp; data _null_; file x; input; put _infile_; cards4; Doe, John ;Smith, Jeff ; lever, dave ;;;; run; data want; infile x dlm='>'; input @'<' email : $100. @@; run;
Super User
Posts: 10,041

Re: Help with SAS code which is in a loop


filename x temp;
data _null_;
file x;
input;
put _infile_;
cards4;
Doe, John ;Smith, Jeff ; lever, dave 
;;;;
run;





data want;
 infile x  dlm='>' lrecl=32767;
 input @'<' email : $100. @@;
run;

Trusted Advisor
Posts: 1,137

Re: Help with SAS code which is in a loop

if only the email id has to be retrieved then please try

 

data want;
i=1;
set have;
do until(scan(text,i,';') eq '');
new=compress(scan(scan(text,i,';'),2,'<'),'>');
i+1;
output;
end;
run;
Thanks,
Jag
Super User
Super User
Posts: 7,060

Re: Help with SAS code which is in a loop

[ Edited ]

Looks like you want to take the parts inside of the <>.  This code will do that and also take values that only have the email address without the name and so do not have any <>s.

 

You can scan the original list using ';' as the delimiter and then within each sub-string look for the values between the <> using scan function again, this time using both < and > as the delimiters.

 

data want;
  set test ;
  length want $32767 ;
  do i=1 to countw(text,';');
     want = catx(';',want,scan(scan(text,i,';'),-1,'<>'));
  end;
run;

 

Ask a Question
Discussion stats
  • 5 replies
  • 345 views
  • 1 like
  • 4 in conversation