BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
a079011
Obsidian | Level 7

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.

1 ACCEPTED SOLUTION

Accepted Solutions
mkeintz
PROC Star

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

--------------------------

View solution in original post

4 REPLIES 4
mkeintz
PROC Star

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

--------------------------
a079011
Obsidian | Level 7

Looks like copy/paste got me, desired out put should all be right justified.

data   
       
       CCFAIL
 JCLERROR
    00000166
    00000001
    00000002
           U500
    00002947
           SE37

mkeintz
PROC Star

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

--------------------------

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

How to Concatenate Values

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 4 replies
  • 2610 views
  • 2 likes
  • 2 in conversation