# RE: st: right justifying strings, left padding strings with zeros

 From Clare L Maxwell To statalist@hsphsun2.harvard.edu Subject RE: st: right justifying strings, left padding strings with zeros Date Wed, 23 Nov 2005 06:00:00 -0600

This is perfect! Thank you so much.

I wonder if either of you can recommend a book or manual that has lots and lots of examples. It doesn't seem as if I'm getting what I should out of staring at descriptions of the string functions, for example. Ian Watson's solution is conceptually similar to how I first approached it, but I didn't get far in mapping my ideas onto the list of functions. Based on my previous problem so adroitly handled by Nick Cox and others, I decided my usual ideas about how to approach things are too colored by the data manipulation language I am coming from, and that I need to clear the mental slate. That wasn't exactly true here, but still I wasn't able to carry out what I hoped to. I would be interested in feeding my brain "monkey see, monkey do" patterns, hoping they would take hold.

Special thanks to Nick and Ian for these further examples of subinstr.

Yours truly,
Clare Maxwell

At 10:16 AM +0000 11/23/05, Nick Cox wrote:

```The step-by-step approach is usually best,
especially if it turns out that you want
something slightly different. But note
that Ian's code can be condensed to

rtrim(substr(v1,1,3)) + subinstr(substr(v1,4,6)," ","0",.))

not that I would necessarily recommend that. Given
a trade-off between clarity and brevity, go
for clarity.

Nick
n.j.cox@durham.ac.uk

Ian Watson

```
``` Assuming your data is in a plain text file test.txt, try the
following:

. insheet using test.txt
(1 var, 7 obs)

. list

+--------+
|     v1 |
|--------|
1. | B    1 |
2. | B  120 |
3. | CCH  7 |
4. | CCH 23 |
5. | CCH213 |
|--------|
6. | UW  23 |
7. | UW 232 |
+--------+

. gen alpha=substr(v1,1,3)

. list alpha

+-------+
| alpha |
|-------|
1. |   B   |
2. |   B   |
3. |   CCH |
4. |   CCH |
5. |   CCH |
|-------|
6. |   UW  |
7. |   UW  |
+-------+

. replace alpha=rtrim(alpha)

. list alpha

+-------+
| alpha |
|-------|
1. |     B |
2. |     B |
3. |   CCH |
4. |   CCH |
5. |   CCH |
|-------|
6. |    UW |
7. |    UW |
+-------+

. gen num=substr(v1,4,6)

. list num

+-----+
| num |
|-----|
1. |   1 |
2. | 120 |
3. |   7 |
4. |  23 |
5. | 213 |
|-----|
6. |  23 |
7. | 232 |
+-----+

. replace num=subinstr(num," ","0",.)

. list num

+-----+
| num |
|-----|
1. | 001 |
2. | 120 |
3. | 007 |
4. | 023 |
5. | 213 |
|-----|
6. | 023 |
7. | 232 |
+-----+

. gen v2=alpha+num

. list v2

+--------+
|     v2 |
|--------|
1. |   B001 |
2. |   B120 |
3. | CCH007 |
4. | CCH023 |
5. | CCH213 |
|--------|
6. |  UW023 |
7. |  UW232 |
+--------+
```
```Clare L Maxwell

```
``` > I have a six-column subject identifier coming into Stata
from an ASCII
> file that looks like the following:
>
> B    1
> B  120
> CCH  7
> CCH 23
> CCH213
> UW  23
> UW 232
>
> I want to read in and manipulate these 6 columns so that in
the end, I
> have a str6 variable that looks like this:
>
>   B001
>   B120
> CCH007
> CCH023
> CCH213
>  UW023
>  UW232
>
> That is, the first three columns have been right justified
and the last
> three columns have been left-padded with zeros.  I have
tried various
> options, but so far, not much luck.  I was considering
> as six str1 variables and putting things together sort of by brute
> force, but I thought I'd ask first.  Any suggestions on good string
> manipulations for this problem?
```
```*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
```
```*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
```