This is the dreaded loop over observations. In
most problems it is unnecessary, including this
one. Thanks to the smart people at StataCorp,
you can go
gen newvar = strvar1 + substr("000",1, 3 - length(strvar2)) + strvar2
and the loop comes free as part of the innards of -generate-.
In Clare's problem, trim(strvar1), trim(strvar2) and
length(trim(strvar2)) might be needed and would do no
harm.
Nick
[email protected]
Richard Palmer-Jones
* if your variables are strvar1 & strvar2
gen str6 newvar = ""
qui des
local N = r(N)
forval i = 1/`N' {
local t1 = strvar1[`i']
local t2 = strvar2[`i']
local leng2 = length("`t2'")
local dum2 = ""
if `leng2' == 1 {
local dum2 = "00"
}
else if `leng2' == 2 {
local dum2 = "0"
}
local var = "`t1'`dum2'`t2'"
replace newvar = "`var'" in `i'
}
list
| strvar1 strvar2 newvar |
|----------------------------|
1. | B 1 B001 |
2. | B 120 B120 |
3. | CCH 7 CCH007 |
4. | CCH 23 CCH023 |
5. | CCH 213 CCH213 |
|----------------------------|
6. | UW 23 UW023 |
7. | UW 232 UW232 |
Richard
On 11/24/05, Ian Watson <[email protected]> wrote:
> Clare
>
> I've reproduced your problem and compared it with
yesterday's solution
> and can only come up with one suggestion.
>
> When you infile the string and then split it, using the
substr function,
> the right hand component (which I called num in yesterday's
post) has
> leading blanks on it. These are then replaced by leading 0s
using the
> subinstr function.
>
> However, when you infile the string as two strings, Stata possibly
> strips the leading blanks from it. Even though it has the
designation of
> a str3 type, it may not have the same "contents" as num did
(which was
> also a str3 type) because that latter was created from substr. That
> is " 23" and "23" look the same on the screen, but they're
not the same
> data.
>
> This is only a guess, and I can't find an easy way to test
it. But it
> suggests you're better off reading your string in as a full
string, then
> splitting it, rather than as two strings. At least that
works (even if
> the reason is not altogether clear to me why).
*
* 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/