Desktop productivity for business analysts and programmers

Select Variables based on character length

Accepted Solution Solved
Reply
Highlighted
Occasional Contributor
Posts: 7
Accepted Solution

Select Variables based on character length

[ Edited ]

Hi all,

 

I am looking to add a leading '0' to variables within a field that are less that 5 characters in length. Does anyone know of a bit of code that can achieve this? Below is my attempt. I know everything after 'THEN' works fine, its the selecting variables with less than 5 characters that is hindering me.

 

CASE
WHEN substr(t1.ded_code,max(1,length(t1.ded_code)-3)) THEN PUT(INPUT(t1.ded_code, best.), z2.)
ELSE t1.ded_code
END
AS ded_code_v2

 

Regards

Finbar


Accepted Solutions
Solution
2 weeks ago
Super User
Super User
Posts: 8,364

Re: Select Variables based on character length

You can simplify it by using SAS functions:

case when lengthn(T1.DED_CODE) < 5 then cats(repeat("0",5-lengthn(T1.DED_CODE)),T1.DED_CODE)
     else T1.DED_CODE end as DED_CODE_V2

So if the trimmed lenght is less than five concatenate 0 for each space less than five.  Note, if DED_CODE is numeric, you could simplify this further by:

put(input(T1.DED_CODE,best.),z5.) as DED_CODE_V2

The Z format padds out numbers with preceeding zeroes.

View solution in original post


All Replies
Solution
2 weeks ago
Super User
Super User
Posts: 8,364

Re: Select Variables based on character length

You can simplify it by using SAS functions:

case when lengthn(T1.DED_CODE) < 5 then cats(repeat("0",5-lengthn(T1.DED_CODE)),T1.DED_CODE)
     else T1.DED_CODE end as DED_CODE_V2

So if the trimmed lenght is less than five concatenate 0 for each space less than five.  Note, if DED_CODE is numeric, you could simplify this further by:

put(input(T1.DED_CODE,best.),z5.) as DED_CODE_V2

The Z format padds out numbers with preceeding zeroes.

Occasional Contributor
Posts: 7

Re: Select Variables based on character length

Hi,

 

Thanks! That works fine, I just changed 

cats(repeat("0",5-lengthn(T1.DED_CODE))

to

cats(repeat("0",4-lengthn(T1.DED_CODE))

 the first one was throwing in two leading '0's

 

Regards

Finbar

☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 2 replies
  • 145 views
  • 1 like
  • 2 in conversation