Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: st: Extracting substrings from variable and combining variables.
From
Amal Khanolkar <[email protected]>
To
"[email protected]" <[email protected]>
Subject
RE: st: Extracting substrings from variable and combining variables.
Date
Fri, 1 Jun 2012 15:29:30 +0000
Thanks for the input and code:
I didn't really understand what the code does (''for each etc...'')
But it does pluck out the those that have the 3 diagnoses of interest and creates 3 separate variables as follows:
tab has637
has637 | Freq. Percent Cum.
------------+-----------------------------------
0 | 2,969,464 99.26 99.26
1 | 21,992 0.74 100.00
------------+-----------------------------------
Total | 2,991,456 100.00
. tab has642
has642 | Freq. Percent Cum.
------------+-----------------------------------
0 | 2,948,590 98.57 98.57
1 | 42,866 1.43 100.00
------------+-----------------------------------
Total | 2,991,456 100.00
. tab hasO1
hasO1 | Freq. Percent Cum.
------------+-----------------------------------
0 | 2,968,084 99.22 99.22
1 | 23,372 0.78 100.00
------------+-----------------------------------
Total | 2,991,456 100.00
- The above also gives a lower number and skips those recorded as duplicates.
- I think using the replace command to restructure preght is probably easier: however you meant I do it before that is using the original 12 variables and skipping egen all together?
Thanks,
/Amal.
Amal Khanolkar, PhD candidate,
Centre for Health Equity Studies (CHESS),
Karolinska Institutet,
106 91 Stockholm.
Ph# +46(0)8 162584/+46(0)73 0899409
www.chess.su.se
________________________________________
From: [email protected] [[email protected]] on behalf of Nick Cox [[email protected]]
Sent: 01 June 2012 13:52
To: '[email protected]'
Subject: RE: st: Extracting substrings from variable and combining variables.
-egen, concat()- concatenates strings (although it is happy to convert numbers to strings on the fly). Concatenation is jargon for chaining together, or addition of strings lengthwise. Thus if you have two string variables with values "foo" and "bar", their concatenation is "foobar". Nothing changes if the string values happen to be identical, so the concatenation of "637" and "637" is "637637". (You can insert spaces or other punctuation, but leave that aside.)
You can't override that; it is what -egen, concat()- is designed to do. -concat()- is not designed to select distinct strings once only, although that's programmable.
Also, you pose another riddle. When you say "correct for this", exactly what do you want instead? Note that some subjects have both "637" and "642", and so that's part of the information.
In your case you should be able to fix -prehgt- to your taste with a few -replace- commands and that's going to be easier than writing other code, or so I guess.
But in case it is helpful, here is code for three indicator variables (not tested).
foreach s in 637 642 O1 {
gen has`s' = 0
qui forval j = 1/10 {
replace has`s' = 1 if prehgt`j' == "`s'" & has`s' == 0
}
}
Nick
[email protected]
Amal Khanolkar
Thanks - this makes sense. Is there any way to correct for this in the egen command before combining the variables?
egen preght=concat(preght1 preght2 preght3 preght4 preght5 preght6 preght7 preght8 preght9 preght10 preght11 preght12)
I'm also curious to know how Stata gets categories with multiple '637's'?? Eventhough the total number of subjects is now 90930 as expected, in effect each patient should be diagnosed with a 637 only once....in other words what does '637637' & '637637637637' mean?
/Amal.
Amal Khanolkar, PhD candidate,
Centre for Health Equity Studies (CHESS),
Karolinska Institutet,
106 91 Stockholm.
Ph# +46(0)8 162584/+46(0)73 0899409
www.chess.su.se
________________________________________
From: [email protected] [[email protected]] on behalf of Nick Cox [[email protected]]
Sent: 01 June 2012 10:26
To: [email protected]
Subject: Re: st: Extracting substrings from variable and combining variables.
That sounds predictable to me. "637" and "637" counts as 2 one way and
-- in its guise as "637637" -- as 1 the other way. It's important to
correct for counting the same thing twice or more.
Consider this:
clear
input str12 diag freq w
"637" 20922 1
"637637" 960 2
"637637637" 104 3
"637637637637" 3 4
"637642" 2 2
"642" 42108 1
"642637" 1 2
"642642" 748 2
"642642642" 7 3
"O1" 22634 1
"O1O1" 720 2
"O1O1O1" 17 3
"O1O1O1O1" 2 4
end
. tab diag [w=freq*w]
(frequency weights assumed)
diag | Freq. Percent Cum.
-------------+-----------------------------------
637 | 20,922 23.01 23.01
637637 | 1,920 2.11 25.12
637637637 | 312 0.34 25.46
637637637637 | 12 0.01 25.48
637642 | 4 0.00 25.48
642 | 42,108 46.31 71.79
642637 | 2 0.00 71.79
642642 | 1,496 1.65 73.44
642642642 | 21 0.02 73.46
O1 | 22,634 24.89 98.35
O1O1 | 1,440 1.58 99.94
O1O1O1 | 51 0.06 99.99
O1O1O1O1 | 8 0.01 100.00
-------------+-----------------------------------
Total | 90,930 100.00
On Fri, Jun 1, 2012 at 9:11 AM, Amal Khanolkar <[email protected]> wrote:
> Hi again,
>
> I tried to combine 12 such variables (examples of three below) to form one variable with the same 3 categories.
>
>
> tab preght1
>
> preght1 | Freq. Percent Cum.
> ------------+-----------------------------------
> 637 | 8,314 20.76 20.76
> 642 | 21,268 53.11 73.88
> O1 | 10,461 26.12 100.00
> ------------+-----------------------------------
> Total | 40,043 100.00
>
>
> . tab preght2
>
> preght2 | Freq. Percent Cum.
> ------------+-----------------------------------
> 637 | 11,202 33.51 33.51
> 642 | 15,191 45.44 78.95
> O1 | 7,036 21.05 100.00
> ------------+-----------------------------------
> Total | 33,429 100.00
>
>
>
> . tab preght4
>
> preght4 | Freq. Percent Cum.
> ------------+-----------------------------------
> 637 | 797 18.02 18.02
> 642 | 1,747 39.51 57.53
> O1 | 1,878 42.47 100.00
> ------------+-----------------------------------
> Total | 4,422 100.00
>
> When I add-up the 12 preght variables, I get a total of 90930 observations that should have my diagnosis of interest. However when using the egn as below I get only 88228!
>
> This what I get when I run 'egen with the concat' function:
>
> egen preght=concat(preght1 preght2 preght3 preght4 preght5 preght6 preght7 preght8 preght9 preght10 preght11 preght12)
> (2903228 missing values generated)
>
>
> preght | Freq. Percent Cum.
> -------------+-----------------------------------
> 637 | 20,922 23.71 23.71
> 637637 | 960 1.09 24.80
> 637637637 | 104 0.12 24.92
> 637637637637 | 3 0.00 24.92
> 637642 | 2 0.00 24.93
> 642 | 42,108 47.73 72.65
> 642637 | 1 0.00 72.65
> 642642 | 748 0.85 73.50
> 642642642 | 7 0.01 73.51
> O1 | 22,634 25.65 99.16
> O1O1 | 720 0.82 99.98
> O1O1O1 | 17 0.02 100.00
> O1O1O1O1 | 2 0.00 100.00
> -------------+-----------------------------------
> Total | 88,228 100.00
>
>
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/