Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.

# Re: st: RE: mata: columns of different eltypes in a transmorphic matrix

 From Joseph Coveney <[email protected]> To [email protected] Subject Re: st: RE: mata: columns of different eltypes in a transmorphic matrix Date Thu, 10 Oct 2013 15:59:29 +0900

```László Sándor wrote:

I would understand the limitation, but then don't understand what
st_data/st_view matrices will be if the underlying data has both
string variables and numeric variables. My code did not complain when

And in any case, as my implementation is about lookups, indices and
ordering, it would be a huge pain to collect the data in two matrices
kept "in sync", meaning the same indices and ordering. Well-well.

--------------------------------------------------------------------------------

Mata's st_data() and st_view() might not have complained, but they
returned only numeric variables to your matrices; variables containing
strings were returned as columns of missing real values.  See below.

For what you're doing, you can use -asarray()- for lookups of mixed
data types.  And you can use pointers.  Or structs.  Consider
something like

pointer(transmorphic matrix) vector MixedElements
transmorphic matrix A, B
A = st_data(., .)
A = select(A, missing(A[1, .])
B = st_sdata(., .)
B = select(B, missing(B[1, .])
MixedElements = (A, B)

You'd still need to keep track of indices and ordering, but you could
dump everything into a single Mata thing (a pointer vector of mixed
matrices . . . or a struct) if that will make keeping things in sync
easier for you.  When it comes time to use it, choose which element
type you want, select and dereference the corresponding matrix, and
then select columns and rows of that at will.  It's probably too
cumbersome to be doing this kind of thing manually all of the time,
but for convenience you can define a List class for the same purpose
that has all of the enabling behavior as methods, with storage
nitty-gritty kept transparent to the user.

Joseph Coveney

. version 13.0

.
. clear *

. set more off

. quietly set obs 2

. generate byte a = 1

. generate str1 b = "B"

.
. mata:
------------------------------------------------- mata (type end to
exit) ---------------------------------------------------------------------
: mata set matastrict on

:
: void function test() {
>         transmorphic matrix A
>         A = st_data(., .)
>         printf("A, st_data()\n")
>         A
>         eltype(A)
>
>         transmorphic matrix B
>         B = st_sdata(., .)
>         printf("\n\nB, st_sdata()\n")
>         B
>         eltype(B)
>
>         st_view(A, ., .)
>         printf("\n\nA, st_view()\n")
>         A
>         eltype(A)
>
>         st_sview(B, ., .)
>         printf("\n\nB, st_sview()\n")
>         B
>         eltype(B)
> }

:
: test()
A, st_data()
1   2
+---------+
1 |  1   .  |
2 |  1   .  |
+---------+
real

B, st_sdata()
1   2
+---------+
1 |      B  |
2 |      B  |
+---------+
string

A, st_view()
1   2
+---------+
1 |  1   .  |
2 |  1   .  |
+---------+
real

B, st_sview()
1   2
+---------+
1 |      B  |
2 |      B  |
+---------+
string

:
: end
-----------------------------------------------------------------------------------------------------------------------------------------------

.
end of do-file

*
*   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/
```

• Follow-Ups: