One possibility is to use PRX (Pearl Regular Expressions). It looks like you always have first the price, then the volume, separated by a comma: Data want;
set have;
prxData=prxParse('/price=([0-9\.]+),volume=([0-9\.]+)/i');
array prices(*) 8 price1-price10;
array volumes(*) 8 volume1-volume10;
start=1;
do _N_=1 to 10;
call prxNext(prxData,start,-1,transactions,pos,len);
if len=0 then leave;
prices(_N_)=input(prxposn(prxData,1,transactions),best32.);
volumes(_N_)=input(prxposn(prxData,2,transactions),best32.);
end; drop start pos len;
run;
A short explanation of the string in PRXPARSE: it first looks for "price=". The string that follows is put in a paranthesis, so that it is stored in a capture buffer, the contents of the buffer must be digits or decimal point. Then follows the text ",volume=" and a new capture buffer with a number. The final "i" tells the function not to care about upper/lower case. The PRXNEXT call routine automatically updates the START variable, so that the next call will look for the next occurence of the pattern. When no more patterns are found, the POS variable (position of pattern) is set to 0 when no more occurrences are found. The PRXPOSN function retrieves the content of the capture buffers.
... View more