data m;
input info $ 1 - 50;
cards;
101 pencils 39
102 parker pens 21
103 apple ipod touch & shuffle 09
104 dell studio laptop 03
run;
/*get the starting nos as pr_id, ending nos as pr_qty and the rest as pr_name*/
One way
data want;
set m;
pr_id=scan(info, 1);
pr_qty=scan(info, -1);
pr_name=substr(info, findw(info, scan(info, 2)), findw(info, scan(info, -1))-findw(info, scan(info, 2)));
run;
I like this offering, one thing I would add is once you have pr_id and pr_qty, you could drop that from the first variable and avoid the longer code:
data want;
set m;
pr_id=scan(info, 1);
pr_qty=scan(info, -1);
pr_name=tranwrd(tranwrd(info,pr_id,""),pr_qty,"");
run;
Just an option.
i couldn't see any data in output. All i can see is table of pr_id,pr_qty,Info,pr_name.
Another possibility is to use PRX functions, which enables you to check for numbers in the right places:
data want; set m; length pr_id $5 pr_name $40 pr_qty $5; prxid=prxparse('/^(\d+) (.+) (\d+)\s*$/'); if not prxmatch(prxid,info) then error 'No match'; else do; pr_id=prxposn(prxid,1,info); pr_name=prxposn(prxid,2,info); pr_qty=prxposn(prxid,3,info); end; keep info pr_:; run;
The PRX string searches for beginning of string "^", some digits "\d+" which are placed in the first capture buffer (the "()" around), a blank, a string which can be anything (".+", in the second capture buffer), a blank, some digits in the third capture buffer, and finally some whithespace "\s*" and end of string "$". You then use PRXPOSN to get at the capture buffers.
Show and example of what you mean.
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.