I encountered a very strange behavior when I use Mata views on temporary variables created by fvrevar. I tried to keep the following example as simple as possible:
Code:
clear all
webuse hsng2

mata:
void mydemean(string scalar varlist, string scalar newvars, string scalar touse) {
    real matrix X, Xn

    st_view(X, ., varlist, touse)
    st_view(Xn, ., newvars, touse)
    Xn[., .] = X :- mean(X)

    X :- mean(X)
    Xn
}
end

tempvar touse
gen byte `touse' = 0
replace `touse' = 1 in 34/37
loc varlist "1b.region 2.region 3.region 4.region"
foreach var in `varlist' {
    fvrevar `var'
    loc var "`r(varlist)'"
    qui replace `var' = .
    loc newvars "`newvars' `var'"
}
mata: mydemean("`varlist'", "`newvars'", "`touse'")
The two Mata matrices displayed by running this code should be identical but they are not:
Code:
          1      2      3      4
    +-----------------------------+
  1 |     0   -.25   -.25   -.25  |
  2 |     0    .75   -.25   -.25  |
  3 |     0   -.25    .75   -.25  |
  4 |     0   -.25   -.25    .75  |
    +-----------------------------+
[symmetric]
       1   2   3   4
    +-----------------+
  1 |  0              |
  2 |  0   0          |
  3 |  0   0   0      |
  4 |  0   0   0   0  |
    +-----------------+
I do not understand why the second matrix is full of zeros. This does not make any sense to me. Does anybody have an idea where I am going wrong? Or is this indeed some weird bug?

I get the same results in all versions from Stata 12 until the most recent update of Stata 16.