- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Posted 09-19-2017 12:02 PM
(2584 views)
Hello,
Looking for some assistance...
I have a dataset with a column containing various member_id's (see below example). I would like the first character, everything left of the dash, to be moved to the end of the string prefixed with two 0's and the dash removed. For example, using the below example, looking at the first member id, I'd like 5-12344 to become 12344005.
COLUMN A
5-12344
5-1234
5-123456
7-345
2-3456
Thanks
6 REPLIES 6
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Use the SCAN() function to separate the components.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
cats(scan(a,2,'-'),'00',scan(a,1,'-'))
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Another option - regular expression substitution :
data have;
input id :$12.;
datalines;
5-12344
5-1234
5-123456
7-345
2-3456
;
proc sql;
select id, prxchange("s/(\d+)\-(\d+)/\200\1/o", 1, id) as newId length=15
from have;
quit;
PG
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
data have;
input id :$12.;
datalines;
5-12344
5-1234
5-123456
7-345
2-3456
;
run;
data want;
set have;
want=repeat('0',9);
x=scan(id,1,'-');
y=scan(id,-1,'-');
substr(want,1,length(y))=y;
substr(want,10-length(x)+1)=x;
run;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Since I was already using heavy artillery, here is some more:
data have;
input id :$12.;
datalines;
5-12344
5-1234
5-123456
7-345
2-3456
;
proc sql;
select id,
put(input(prxchange("s/(\d+)\-(\d+)/\200\1/o", 1, id),10.),z10.0) as newId
from have;
quit;
PG