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: using matrix as lookup table
From
"Knott, Anne Marie" <[email protected]>
To
"[email protected]" <[email protected]>
Subject
RE: st: using matrix as lookup table
Date
Thu, 23 Jan 2014 03:42:17 +0000
thanks so much for your help Sergiy.
I at least got something to run!, but none of the missing values in USfromlo were replaced by calls from the matrix
here's what i entered:
local jmax=colsof(xchgrates)
local imax=rowsof(xchgrates)
forvalues i=1/`imax' {
forvalues j=1/`jmax' {
quietly replace USfromlo =xchgrates[`i', `j'] if curcd=="j" & year==`i'
}
}
i put double quotes on j because stata told me i had a type mismatch when i had single quotes (j is a string)
________________________________________
From: [email protected] [[email protected]] on behalf of Sergiy Radyakin [[email protected]]
Sent: Wednesday, January 22, 2014 6:41 PM
To: [email protected]
Subject: Re: st: using matrix as lookup table
Dear Anne Marie,
you are using the wrong quotes for local. Check the closing quote.
Also reading rowsof() and colsof() doesn't make sense in your program,
since you never use the read values, but rather hardcoded constants.
It's a matter of taste and convention, but i is often the row index,
and j the column index. Just as x is usually the horizontal
coordinate, and y - vertical.
Something like this works, (see below).
Best, Sergiy Radyakin
matrix xchgrates=2.4, 2.9, 10.7 \ 4.1, 3.0, 12.0
local jmax=colsof(xchgrates)
local imax=rowsof(xchgrates)
sysuse auto, clear
generate int year=foreign+1
generate int curcd=rep78
generate revt=price
generate revtUSD=.
forvalues i=1/`imax' {
forvalues j=1/`jmax' {
quietly replace revtUSD=revt*xchgrates[`i',
`j'] if curcd==`j' & year==`i'
}
}
On Wed, Jan 22, 2014 at 6:44 PM, Knott, Anne Marie <[email protected]> wrote:
> I'm trying to use a matrix of exchange rates as a lookup table for another database. I've created and verified the matrix, and am following the command structure in Cox 2012 to call it, but I keep getting the following error message:
>
> `j' is an invalid name.
>
> I deleted all the j references, but then got the same error message for i. I've tried alternative names, so assume the problem is with the quotes--I'm using a mac.
>
> Here's the code:
>
>
> local i=colsof(xchgrates)
>
> local j=rowsof(xchgrates)
>
> forvalues i=1/89 {
>
> forvalues j=1/26 {
>
> quietly replace revtUSD=revt*xchgrates[`j’, `i’] if curcd==`i’ & year==`j’
>
>
> }
>
> }
>
> thanks for your help.
>
>
> Anne Marie Knott
> Professor of Strategy
> Olin Business School
> Washington University in St. Louis
> Campus Box 1133
> One Brookings Drive
> St. Louis, MO 63130-4899
> (314) 935-4679
> [email protected]
> <http://apps.olin.wustl.edu/faculty/knott/>website<http://apps.olin.wustl.edu/faculty/knott/>
>
> *
> * 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/