Bookmark and Share

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: converting table into matrix


From   R Zhang <[email protected]>
To   [email protected]
Subject   Re: st: converting table into matrix
Date   Sat, 29 Mar 2014 11:46:08 -0400

Thanks, Nick !  You are always so generous in helping others.

concerning:

egen i = seq(), block(`nvals')
egen j = seq(), to(`nvals')

I did some google search and read one of your earlier posting on (
Generating block randomation schedule using Stata)

would it be correct to say : you use egen to generate the dimentions
for the row and column of the matrix, if my matrix is 400*450, would I
need to change your program?

Best,
Rochelle


On Sat, Mar 29, 2014 at 5:39 AM, Nick Cox <[email protected]> wrote:
> This can be corrected and simplified as follows, illustrating the 7th
> Law of Stata programming, that a shorter program needs more time. I
> don't repeat Rochelle's code setting up a data example.
>
> qui tab C_industry
> local nvals = r(r)
>
> egen i = seq(), block(`nvals')
> egen j = seq(), to(`nvals')
>
> matrix A=J(`nvals',`nvals',.)
>
> forval n = 1/`=_N' {
>   matrix A[`=i[`n']', `=j[`n']'] = x[`n']
>   if C_industry[`n'] != C_industry[`=`n'-1'] {
>           local rownames `rownames' `=C_industry[`n']'
>   }
> }
> matrix rownames A = `rownames'
> matrix colnames A = `rownames'
> matrix list A
>
> Nick
> [email protected]
>
>
> On 29 March 2014 01:36, Nick Cox <[email protected]> wrote:
>> Your main error is to overlook the fact that -encode- by default
>> encodes in alphanumeric order. See for example the thread started by
>> Michael McCulloch recently at
>> http://www.stata.com/statalist/archive/2014-03/msg00346.html which
>> underlined this point.
>>
>> There are various ways round this. One is just not to -encode-. If you
>> map your string values to value labels, you then have to read them
>> back.
>>
>> This code goes further than yours in supplying row and column names
>> for the matrix. The assumption is that the string variables contain
>> values all suitable as matrix row and column labels.
>>
>> clear all
>> input str20 C_industry str20 S_industry int x
>> Forestrysupport Forestrysupport 0
>> Forestrysupport Forestrynursery 0
>> Forestrysupport logging 0
>> Forestrynursery Forestrysupport 64
>> Forestrynursery Forestrynursery 1
>> Forestrynursery logging 1
>> logging Forestrysupport 7
>> logging Forestrynursery 29
>> logging logging 41
>> end
>>
>> qui tab C_industry
>> local nvals = r(r)
>>
>> egen i = seq(), block(`nvals')
>> egen j = seq(), to(`nvals')
>>
>> matrix A=J(`nvals',`nvals',.)
>> matrix list A
>>
>> forval n = 1/`=_N' {
>>   matrix A[`=i[`n']', `=j[`n']'] = x[`n']
>>   if C_industry[`n'] != C_industry[`=`n'-1'] {
>>           local rownames `rownames' `=C_industry[`n']'
>>   }
>>   if `n' < `nvals' {
>>           local colnames `colnames' `=S_industry[`n']'
>>   }
>> }
>> matrix rownames A = `rownames'
>> matrix colnames A = `colnames'
>> matrix list A
>>
>> Nick
>> [email protected]
>>
>>
>> On 28 March 2014 23:05, R Zhang <[email protected]> wrote:
>>> Nick,
>>> I forgot to post the code. Sorry! My real data has over 400*400
>>> dimensions in a stata data format. that is why i can't use simple
>>> matrix command to input data as matrix.
>>>
>>>
>>> ***** my hypothetical data
>>> clear all
>>> input str20 C_industry str20 S_industry int x
>>> Forestrysupport Forestrysupport 0
>>> Forestrysupport Forestrynursery 0
>>> Forestrysupport logging 0
>>> Forestrynursery Forestrysupport 64
>>> Forestrynursery Forestrynursery 1
>>> Forestrynursery logging 1
>>> logging Forestrysupport 7
>>> logging Forestrynursery 29
>>> logging logging 41
>>> end
>>>
>>> list
>>>
>>> encode C_industry, gen(c)
>>> encode S_industry, gen(s)
>>>
>>>
>>>
>>> drop C_ S_
>>> list
>>>
>>> levelsof c, local(levs)
>>> local rows : word count `levs'
>>> matrix A=J(`rows',`rows',.)
>>> matrix list A
>>>
>>> forval i=1/`=_N' {
>>>   local r=c[`i']
>>>   local c=s[`i']
>>>   matrix A[`r',`c']=x[`i']
>>> }
>>>
>>> matrix list A
>>>
>>> *******************************************
>>>
>>> my guess is that the best approach is to use a loop to input data into matrix.
>>>
>>> my original post indicates the code did not produce the matrix I
>>> wanted. could you please critique?
>>>
>>> thanks a lot,
>>>
>>> Rochelle
>>>
>>>
>>> On Fri, Mar 28, 2014 at 3:49 PM, Nick Cox <[email protected]> wrote:
>>>> I don't see that your code produces a matrix at all.
>>>>
>>>> Seems that you would be better off just typing it in directly.
>>>>
>>>> matrix want = (0,0,0\64,1,1\7,29,41)
>>>> matrix rownames want = Forestrysupport Forestrynursery logging
>>>> matrix colnames want = Forestrysupport Forestrynursery logging
>>>>
>>>> Nick
>>>> [email protected]
>>>>
>>>>
>>>> On 28 March 2014 19:37, R Zhang <[email protected]> wrote:
>>>>> Dear all,
>>>>>
>>>>> I have the following sample code to input data from stata (see below
>>>>> datahave) and get an output in matrix form. after that i will compute
>>>>> eigenvalue for this matrix.
>>>>>
>>>>> the code runs, but the output matrix has some elements misplaced. I
>>>>> wonder if someone could help correct it.
>>>>>
>>>>> thanks!
>>>>> ++++++++++++
>>>>> datahave
>>>>> clear all
>>>>> input str20 C_industry str20 S_industry int x
>>>>> Forestrysupport Forestrysupport 0
>>>>> Forestrysupport Forestrynursery 0
>>>>> Forestrysupport logging 0
>>>>> Forestrynursery Forestrysupport 64
>>>>> Forestrynursery Forestrynursery 1
>>>>> Forestrynursery logging 1
>>>>> logging Forestrysupport 7
>>>>> logging Forestrynursery 29
>>>>> logging logging 41
>>>>> end
>>>>> ++++++++++++
>>>>>
>>>>> ++++++++++++
>>>>> matrix want
>>>>>            c1 c2 c3
>>>>> r1        0    0   0
>>>>> r2        64   1   1
>>>>> r3         7    29  41
>>>>>
>>>>>
>>>>> I would like to replace c1,c2,c3 with variable names Forestrysupport
>>>>> Forestrynursery  logging
>>>>>
>>>>> -Rochelle
>>>>> *
>>>>> *   For searches and help try:
>>>>> *   http://www.stata.com/help.cgi?search
>>>>> *   http://www.stata.com/support/faqs/resources/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/faqs/resources/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/faqs/resources/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/faqs/resources/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/faqs/resources/statalist-faq/
*   http://www.ats.ucla.edu/stat/stata/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index