## Select Variables based on character length

Solved
Occasional Contributor
Posts: 7

# 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
‎01-03-2018 06:11 AM
Super User
Posts: 9,840

## 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.

All Replies
Solution
‎01-03-2018 06:11 AM
Super User
Posts: 9,840

## 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.