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: Mata - extracting various vectors of different sizes in one loop
From
George Vega Yon <[email protected]>
To
[email protected]
Subject
Re: st: Mata - extracting various vectors of different sizes in one loop
Date
Thu, 4 Apr 2013 11:43:40 -0300
Dear Nicolas,
I guess a more efficient way to do this would be filling a matrix and
after that replacing the data in Stata. That way you won't need to
make a fancy replacement during the loop; will be a clearer code.
Best wishes!
George
George Vega Yon
7 647 2552
http://cl.linkedin.com/in/georgevegayon
2013/4/4 Matthew Baker <[email protected]>:
> Nicholas --
>
> I have run into this problem as well, but have a slightly different
> solution (I'm not sure it's more elegant, though!) One thing that
> wasn't quite clear from your message was whether or not the values you
> were computing had to be placed in a particular place or if they could
> just be listed "from the beginning of a row," so I assumed not.
>
> My solution is to create a matrix with a maximal number of columns and
> then fill it in on the fly, and then get everything into stata using
> st_view - which has the property that variables can be overwritten
> from within mata. Anyways:
>
> clear all
> set seed 8675309
> set obs 100
> mata:
>
> // Random lengths for vectors:
> ni=J(100,1,1)
> for (i=1;i<=100;i++) ni[i]=round(runiform(1,1)*20)+1
>
> // Random vectors of random lengths placed in the array,
> // Which will also store a scalar which is length:
>
> Z=J(100,30,.)
> for (i=1;i<=100;i++) {
> Stuff=runiform(1,ni[i])
> length=cols(Stuff)
> Z[i,1::length]=Stuff
> }
> end
>
> local zvals
> forvalues i=1/30 {
> gen z`i'=.
> local zvals "`zvals' z`i'"
> }
> mata
> st_view(Ztemp=.,.,"`zvals'")
> Ztemp[.,.]=Z
> end
>
> On Thu, Apr 4, 2013 at 6:26 AM, nick bungy <[email protected]> wrote:
>> I have a mata code that cycles through grid references (eastings, northings) of x entities and calculates for each entity all the other entities which are within a 10km radius of it.
>> So each individual entity has a row vector, with dimensions anywhere between 1 row (1 firm within 10km radius) and ~80 rows (80 firms within 10km radius). This is throwing up conformity errors when I try to store these vectors into a selection of ~80 variables in Stata.
>> My thought was to artifically inflate all row vectors to say 100 and fill all of the extra cells in each row vector with 0, then I can extract to 100 variables without conformity errors. I can then clean this up quite easily using Stata functions. I'm not quite sure how to go about this though.
>> My mata code is the following:
>>
>> mata:
>> geoeasta = st_data(., "Geoeast")
>> geonortha = st_data(., "Geonorth")
>> n = rows(geoeasta)
>>
>> density = .
>> densitytwo = .
>> densitythree = .
>> dups = .
>>
>>
>> for(i=1; i<=n; ++i) {
>>
>> d = sqrt((geoeasta:-geoeasta[i]):^2 + (geonortha:-geonortha[i]):^2)
>> d[i] = .
>> density = select(d, d[.,1]:<10000)
>> minindex(density, 80, densitytwo, dups)
>> st_store(i, ("MSOA1", "MSOA2", "MSOA3" etc etc.), densitytwo)
>> //This stores the nearest neighbours into our variables, which we defined at the top.
>>
>> }
>>
>>
>> end
>> I suspect I need a line or two below minidex, which inflates densitytwo to a 100 row vector and fills all the extra rows generated with 0. Or perhaps there is a more elegent way?
>> Many thanks,
>> Nicholas
>> *
>> * 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/
>
>
>
> --
> Dr. Matthew J. Baker
> Department of Economics
> Hunter College and the Graduate Center, CUNY
>
> *
> * 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/