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: Re: st: Use of matrix values in generate statements
From
Nick Cox <[email protected]>
To
[email protected]
Subject
Re: Re: st: Use of matrix values in generate statements
Date
Sun, 27 Mar 2011 12:02:58 +0100
I am reading backwards in the thread. Daniel's loop-less statement is
clearly better yet.
Nick
On Sun, Mar 27, 2011 at 10:49 AM, Nick Cox <[email protected]> wrote:
> I agree. My point was that Daniel was epsilon away from concise code,
> even in Stata. He just needed the loop technique.
>
> There are other trade-offs here. For example, the minutes spent
> learning about loops in Stata will save you hours of coding time. The
> hours spent learning Mata may add many pleasant days to your life as
> it is such a satisfying language -- and, to pick up an underlying
> theme in Daniel's post, one that is close to what many people will
> know from work with other languages.
>
> Nick
>
> On Sun, Mar 27, 2011 at 2:40 AM, Kit Baum <[email protected]> wrote:
>> <>
>> Nick said
>>
>> I want to add a footnote. Here is a basic technique for using a lookup
>> matrix to populate a variable z. I mix algebra with Stata. The idea is
>> that variables x and y tell you which row and column of the matrix to
>> use.
>>
>> matrix lookup = ...
>> gen z = .
>> forval i = 1/I {
>> forval j = 1/J {
>> quietly replace z = lookup[`i', `j'] if x == `i' & y == `j'
>> }
>> }
>>
>> I am just using -forval- to turn Daniel's statements into a double
>> loop over possibilities.
>>
>>
>>
>> Nick is of course quite correct in noting that Dan's frustration in translating logic into ado-file code can be handled very well this way by a double loop.
>> For a relatively small problem (where there are not too many values in the lookup matrix, and where you're trying to apply the lookup
>> to a sample of modest size) this will work just fine. However, it must enumerate all of the (in Dan's case, 144) possibilities and issue
>> (in Dan's case, 144) -replace- statements for each possibility. Stata has an overhead, as Nick well knows, for -replace-, as Stata must keep track of how many changes are being made.
>>
>> The Mata logic which I presented is (horror!) a loop over observations, but the compiled code is so fast that I had to kick the sample size to
>> 1 million before -rmsg- would register more than a fraction of one second to perform the loop. I haven't tried timing Nick's option (and to be fair I
>> would have to generate more elaborate fake data to really test it) but I wager it will take more than 8 or 9 seconds to perform those 144
>> replace commands on 1 million observations.
*
* 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/