hello
I am trying to do the following loop which would take quite some time. I would be grateful if anyone can comment if there is any part of the code that can be modified to speed up to computation. Thanks!
I am trying to do the following loop which would take quite some time. I would be grateful if anyone can comment if there is any part of the code that can be modified to speed up to computation. Thanks!
Code:
unab x : x* loc xcount = wordcount("`x'") forvalues i=1/`xcount' { loc xLx="`xLx' x`i' L1_x`i' " } putmata X=(`xLx') //X store a large number of variables from Stata mata xcount=cols(X) mata store=J(xcount*xcount*xcount,7,.) //to store computation results from the mata loop below mata loop=1 for (a=1; a<=xcount; a++) { for (b=1; b<=xcount ; b++) { for (c=1; c<=xcount ; c++) { if (a!=b & a!=c & b!=c & a>3 & b>3 & c>3) { x1mean = mean(select(X[,1], X[,a]:>X[,b] :& X[,a]:<X[,c] :& !(X[,a]:>X[,b] :& X[,a]:<X[,c]) :& X[,1]:<0.4 )) // compute conditional mean on X[,1] x2mean = mean(select(X[,2], X[,a]:>X[,b] :& X[,a]:<X[,c] :& !(X[,a]:>X[,b] :& X[,a]:<X[,c]) :& X[,1]:<0.4 )) // compute conditional mean on X[,2] x3mean = mean(select(X[,3], X[,a]:>X[,b] :& X[,a]:<X[,c] :& !(X[,a]:>X[,b] :& X[,a]:<X[,c]) :& X[,1]:<0.4 )) // compute conditional mean on X[,3] freq = colnonmissing(select(X[,1], X[,a]:>X[,b] :& X[,a]:<X[,c] :& !(X[,a]:>X[,b] :& X[,a]:<X[,c]) :& X[,1]:<0.4 )) // compute obs no. on selected X[,1] store[loop,]=(a,b,c,freq,x1mean,x2mean,x3mean) loop=loop+1 } else 1 } } } xa=store[,1] xb=store[,2] xc=store[,3] freq=store[,4] x1mean=store[,5] x2mean=store[,6] x3mean=store[,7] end