I want to read factor variables into mata and omit the base level from the resulting matrix. The code below:

Code:
. clear
. set obs 10
number of observations (_N) was 0, now 10
. gen x = mod(_n, 3)
. mata st_data(., "i.x")
       1   2   3
    +-------------+
  1 |  0   1   0  |
  2 |  0   0   1  |
  3 |  0   0   0  |
  4 |  0   1   0 
  5 |  0   0   1  |
  6 |  0   0   0  |
  7 |  0   1   0  |
  8 |  0   0   1  |
  9 |  0   0   0  |
 10 |  0   1   0  |
    +-------------+
gives a column of 0s at the start. I thought of removing the base level from the variable list, but this didn't work:

Code:
. mata st_data(., "1.x 2.x")
       1   2
    +---------+
  1 |  0   0  |
  2 |  0   1  |
  3 |  0   0  |
  4 |  0   0  |
  5 |  0   1  |
  6 |  0   0  |
  7 |  0   0  |
  8 |  0   1  |
  9 |  0   0  |
 10 |  0   0  |
    +---------+
You can see I still get a column of 0s, which I found startling. The only workaround I could come up with was something along the lines of

Code:
mata X = st_data(., "i.x")
mata select(X, !(colsum(X :== 0) :== rows(X)))
which seems very clunky. Is there a better way to do this? Incidentally, I find the parsing of factor variables into mata a bit odd. For instance, in my example:

Code:
. gen y = _n
. mata st_data(., "1.x y 2.x")
        1    2    3
    +----------------+
  1 |   0    0    1  |
  2 |   0    1    2  |
  3 |   0    0    3  |
  4 |   0    0    4  |
  5 |   0    1    5  |
  6 |   0    0    6  |
  7 |   0    0    7  |
  8 |   0    1    8  |
  9 |   0    0    9  |
 10 |   0    0   10  |
    +----------------+
So 1.x and 2.x are grouped together in a different order than the one requested.