Matthew, what you get back is the address of the created struct. In
oder to use the returned structure, you have to declare it beforehand
(note that you cannot use structures in interactive mode). You could
code something like the following:
function whatever()
{
struct mups scalar ms
...
ms = markups(s,p,b)
... ms.margins ...
... ms.marks ...
...
}
ben
On 9/17/07, Matthew Weinberg <[email protected]> wrote:
> I'm trying to use structures for the first time and am having a little
> trouble.
> I want the function markups to take three arguments (s,p,b) and return
> three arguments (margins, marks, and costs). I'm getting back one
>
> My code is:
>
> mata
> struct mups{ /*define the structure*/
> real matrix margins
> real matrix marks
> real matrix costs
> }
>
> struct mups function markups(s,p,b) /*define the function*/
> {
> struct mups scalar ms /*declare structure variable*/
> n=rows(s)
> S=J(n,n,0)
> for(i=1;i<=n;i++){
> for(j=1;j<=n;j++){
> S[i,j]=-b*s[i]*s[j]
> }
> }
> for(i=1;i<=n;i++){
> S[i,i]=-b*s[i]*s[i]+b*s[i]
> }
> Omega=I(n)*S
> ms.margins=invsym(Omega)*s
> ms.costs=p-ms.margins
> ms.marks=(p-ms.costs):/p
> return(ms)
> }
> end
>
> When I evaluate my function, I get back what something like 0x27c65c
> instead of the three vectors margins, costs, and marks. I'd really
> appreciate it if somebody could tell me what I'm doing wrong. Thanks, Matt
>
> *
> * For searches and help try:
> * http://www.stata.com/support/faqs/res/findit.html
> * http://www.stata.com/support/statalist/faq
> * http://www.ats.ucla.edu/stat/stata/
>
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/