- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Hi, is there a quick way to substring from the right but skip a few digits.
If I have 2345001 I want to get 2345 .. I want to only remove the last 3 digits... the length of the field is not uniform, soucl be 8 digits or 10 or 9, etc. but th eonly thing sore sure is that I want to remove the last 3 digits.. Thanks
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
myStr = substr(myStr, 1, length(myStr) - 3);
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Another approach in these sorts of situations is to use the substring function with the reverse function
mystr = reverse(substr(strip(reverse(mystr)),4));
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Is your variable a number or a character string?
137 data _null_;
138 x=2345001 ;
139 y=int(x/1000);
140 put x= y=;
141 run;
x=2345001 y=2345
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
The more, the merrier:
data _null_;
mystr="2345001";
new_str=prxchange('s/(^\w+)(\w{3}$)/$1/',-1,strip(mystr));
put mystr= new_str=;
run;
Haikuo
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
The simpler, the better :smileysilly:
data _null_;
mystr=" 2345001 ";
new_str = prxchange('s/\d{3}\s*$//', 1, mystr);
put mystr= new_str=;
run;
PG
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Better indeed!
Haikuo
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Might be better use of prxchange, but not exactly readable nor intuitively obvious what the code is doing.
I'd want a comment explaining what was being done and why so that my BAU support junior could understand what the code was doing.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
It reads: Replace (s) a succession of exactly 3 ({3}) digits (\d) followed by any amount (*) of white space (\s) and occuring at the end of the string ($) with nothing(//). Do this only once.
PG