Dear Statalists,
I am very new to Mata and I am trying to solve a problem that involves finding the minimum distance index.
So in the above example, suppose we have three matrices A,B, and C. For each element in A, I would like to find the closest point in B (in absolute value) and record the position index, then I want to find the value in the same position in C. For example, suppose A[1,1]=23, the element in B that is closest to 23 is B[10,2]=22.9, then in a new Matrix of the same size with A, call it D, we should have D[1,1]=C[10,2]. We will do so for each element of A.
I find the logic quite simple but get stuck with carrying it out in code. My idea is to use for loop and minindex, but I get it wrong over and over again.
One of my shot is
which returns me, "<istmt>: 3499 D() not found".
Any suggestions will be welcomed! I am particularly curious about whether we can work it out without calling the for loop. Calling so many for loop seems to be very inefficient.
I am very new to Mata and I am trying to solve a problem that involves finding the minimum distance index.
Code:
sysuse auto, clear
mata:
st_view(A=.,.,("weight","price","gear_ratio"))
st_view(B=.,.,("mpg","length"))
st_view(C=.,.,("displacement","gear_ratio"))
end
I find the logic quite simple but get stuck with carrying it out in code. My idea is to use for loop and minindex, but I get it wrong over and over again.
One of my shot is
Code:
sysuse auto, clear
mata:
st_view(A=.,.,("weight","price","gear_ratio"))
st_view(B=.,.,("mpg","length"))
st_view(C=.,.,("displacement","gear_ratio"))
for (i=1;i<=rows(A);i++)
{
for (j=1;j<=cols(A);j++)
{
D = abs(B:-A[i,j])
for (n=1;n<=rows(D);n++)
{
minindex(D(n,.),1,in,w)
}
}
}
end
Any suggestions will be welcomed! I am particularly curious about whether we can work it out without calling the for loop. Calling so many for loop seems to be very inefficient.

Comment