- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
I have input data that will be numeric and/or character and will be anywhere from 1 to 8 characters in length. For example;
OPTION NOCENTER;
DATA rawdata;
INPUT data $ 1-8;
DATALINES;
CCFAIL
JCLERROR
166
1
2
U500
2947
SE37
;
PROC PRINT DATA = rawdata;
I need the final output to be 8 characters in width, aligned right and leading zeros on any value that begin with a number extending it to a length of 8 characters. For example
JCCFAIL
JCLERROR
00000166
00000001
00000002
U500
00002947
SE37
Any thoughts on how to accomplish this would be greatly appreciated.
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
proc sql;
select
case (anyalpha(data)>0)
case (notdigit(trim(data))>0)
when (1) then right(data)
else translate(right(data),'0',' ')
end
as data
from rawdata;
quit;
additional edit: the TRANSLATE function translates characters in the first argument. To me, it is counterintuitive that the 3rd arg is translated to the 2nd, but that's how it is.
The hash OUTPUT method will overwrite a SAS data set, but not append. That can be costly. Consider voting for Add a HASH object method which would append a hash object to an existing SAS data set
Would enabling PROC SORT to simultaneously output multiple datasets be useful? Then vote for
Allow PROC SORT to output multiple datasets
--------------------------
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
You have the character values JCLERROR and CCFAIL left-justified in the desired output, but U500 and SE37 are right-justified. What criterion are you using to make that distinction?
The hash OUTPUT method will overwrite a SAS data set, but not append. That can be costly. Consider voting for Add a HASH object method which would append a hash object to an existing SAS data set
Would enabling PROC SORT to simultaneously output multiple datasets be useful? Then vote for
Allow PROC SORT to output multiple datasets
--------------------------
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Looks like copy/paste got me, desired out put should all be right justified.
data
CCFAIL
JCLERROR
00000166
00000001
00000002
U500
00002947
SE37
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
proc sql;
select
case (anyalpha(data)>0)
case (notdigit(trim(data))>0)
when (1) then right(data)
else translate(right(data),'0',' ')
end
as data
from rawdata;
quit;
additional edit: the TRANSLATE function translates characters in the first argument. To me, it is counterintuitive that the 3rd arg is translated to the 2nd, but that's how it is.
The hash OUTPUT method will overwrite a SAS data set, but not append. That can be costly. Consider voting for Add a HASH object method which would append a hash object to an existing SAS data set
Would enabling PROC SORT to simultaneously output multiple datasets be useful? Then vote for
Allow PROC SORT to output multiple datasets
--------------------------
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Thank you!!!!