Hi,
I have run the code (please see below)
data have;
input = "CRH PLC TO BID FOR PPC LTD";
run;
data want;
set have;
temp=input;
p=prxmatch('/\b(TO BID)\b/i',temp);
do while(p);
temp=substr(temp,p);
temp=substr(temp,findc(temp,' ')+1);
Buy=catx(' ',scan(temp,1,' '),scan(temp,2,' '),scan(temp,3,' '),scan(temp,4,' '));
p=prxmatch('/\b(TO BID)\b/i',temp);
end;
drop temp p;
run;
which uses an anchor word "TO BID" and brings back exactly the data I require after the anchor which is "BID FOR PPC LTD"
Do you happen to know how I can reverse this and take words before the anchor word "TO BID" ? I am wanting to obtain the text "CRH PLC TO BID"
Thanks
Chris
Or simply:
data have; input="CRH PLC TO BID FOR PPC LTD"; after=substr(input,index(input,"TO BID")+6); before=substr(input,1,index(input,"TO BID")+5); run;
Or simply:
data have; input="CRH PLC TO BID FOR PPC LTD"; after=substr(input,index(input,"TO BID")+6); before=substr(input,1,index(input,"TO BID")+5); run;
How far back do you want to go?
This may help:
data WANT;
STR = "CRH PLC TO BID FOR PPC LTD";
WANT = prxchange('s/(.*)\bTO BID\b.*/$1/i',1,STR);
put WANT=;
run;
WANT=CRH PLC
Also look at the prxsubstr() function.
Thanks for your reply. So if I wanted to go back and retrieve "
"CRH PLC TO BID"
and also
"BID FOR PPC LTD"
how would I tweak the code? It's a function that I have never used before. I'll need to do some reading up around the subject.
Many thanks
Chris
What is wrong with @RW9's solution? You never stated what the extraction criteria are.
If you have never used regular expressions, the learning curve can be steep.
Available on demand!
Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.
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.