Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: st: Re: How to determine if a variable is a dummy in mata
From
Paul Corral <[email protected]>
To
[email protected]
Subject
Re: st: Re: How to determine if a variable is a dummy in mata
Date
Sun, 17 Nov 2013 11:34:33 -0500
Thank you for the help. I ended up doing the following:
local words=wordcount("`vars'")
matrix dummy=J(1,`words',0)
tokenize `vars'
forvalues x= 1/`words'{
capture assert ``x''==1 | ``x''==0
if _rc==0 {
qui: tab ``x''
if r(r)==2{
matrix dummy[1,`x']=1
}
}
}
Then once in mata I just imported that matrix using st_matrix.
Thanks for the help, and ideas.
Kind Regards,
Paul Corral
On Sun, Nov 17, 2013 at 6:01 AM, Nick Cox <[email protected]> wrote:
> (2) better as
>
> : all((x :== 0) :| (x :== 1))
> Nick
> [email protected]
>
>
> On 17 November 2013 10:09, Nick Cox <[email protected]> wrote:
>> Here are some other solutions.
>>
>> (1)
>>
>> Only for 0 and 1 is a number equal to its own square. Hence
>>
>> : x = (0,0,0,0,1,1,1)
>>
>> : x == x:^2
>> 1
>>
>> A graph such as
>>
>> twoway function x^2, ra(-3 3) || function x, ra(-3 3)
>>
>> may help make this vivid.
>>
>> (2)
>>
>> sum((x :== 0) :| (x :== 1)) == length(x)
>>
>> Nick
>> [email protected]
>>
>> On 17 November 2013 05:30, Joseph Coveney <[email protected]> wrote:
>>> Paul Corral wrote:
>>>
>>> I'm been trying to determine if a variable is a dummy or not within mata.
>>>
>>> Is there an easy way to do this without iterating over each row of a
>>> matrix's column and check if it is either 0 or 1. I was trying to use
>>> the allof() command, however it can only check if all are a scalar.
>>> So, while I may check if all are ones, it won't allow me to check if
>>> all are 0 or 1.
>>>
>>> --------------------------------------------------------------------------------
>>>
>>> Something like that below should work. If you don't like the verbosity, you can
>>> condense it all to a single line of code, although it might make it difficult to
>>> follow.
>>>
>>> Other ways come to mind to accomplish the same thing, for example, to covert the
>>> column to text and then use a string search (glance through Mata's string
>>> functions for guidance) for characters other than "0" and "1". Some of them
>>> might be more efficient, too.
>>>
>>> Joseph Coveney
>>>
>>> : mata set matastrict on
>>>
>>> :
>>> : real scalar function indicator(
>>>> real matrix TestedMatrix,
>>>> real scalar tested_column_index) {
>>>>
>>>> real colvector TestedColumn
>>>> TestedColumn = TestedMatrix[., tested_column_index]
>>>>
>>>> TestedColumn = uniqrows(TestedColumn)
>>>>
>>>> real scalar result
>>>> result = (
>>>> (TestedColumn[1] == 0) &&
>>>> (TestedColumn[2] == 1) &&
>>>> (rows(TestedColumn) == 2)
>>>> )
>>>>
>>>> return(result)
>>>> }
>>>
>>> :
>>> : A = (0, 1, 2, 3 \ 1, 4, 5, 6 \ 0, 7, 8, 9)
>>>
>>> :
>>> : indicator(A, 1)
>>> 1
>>>
>>> : indicator(A, 2)
>>> 0
>>>
>>> :
>>> : A = A \ (10, 11, 12, 13)
>>>
>>> :
>>> : indicator(A, 1)
>>> 0
>>>
>>> :
>>> : end
> *
> * 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/
*
* 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/