Notice: On March 31, it was **announced** that Statalist is moving from an email list to a **forum**. The old list will shut down on April 23, and its replacement, **statalist.org** is already up and running.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

From |
Nick Cox <njcoxstata@gmail.com> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: beginer's mata function in dofile |

Date |
Tue, 7 Aug 2012 16:07:40 +0100 |

This correction is no correction. Kit has a final ' transposing the vector, which you evidently overlooked. Nick On Tue, Aug 7, 2012 at 4:00 PM, tashi lama <ltashi32@hotmail.com> wrote: > thanx although I think it should be > b=(1::rows(Y)) instead of b=(1..rows(Y)) > > ---------------------------------------- >> From: kit.baum@bc.edu >> To: statalist@hsphsun2.harvard.edu >> Subject: Re: st: beginer's mata function in dofile >> Date: Sat, 4 Aug 2012 14:01:08 +0000 >> >> <> >> On Aug 4, 2012, at 2:33 AM, Tashi wrote: >> >>> I am trying to learn Mata and this is my first do file with mata function. I mimicked the code originally written by William Gould of StataCorp titled "Mata Matters: Creating new variables-sounds boring, isn't". >>> >>> bp1 bp2 bp3 bp4 bp5 | >>> |-----------------------------| >>> | 170 168 166 163 161 | >>> | 158 156 154 151 147 | >>> | 161 158 155 151 147 | >>> | 155 153 151 148 144 | >>> | 158 160 160 161 162 | >>> >>> begin do-file mata1.do >>> capture program drop nn >>> mata: do_trend_var("b", "bp1 bp2 bp3 bp4 bp5") >>> list >>> end >>> function do_trend_var(string scalar newvarname, string scalar varnames) >>> { >>> real matrix Y >>> real colvector b >>> real scalar idx >>> st_view(Y, ., varnames) >>> b =1\2\3\4\5 >>> idx = st_addvar("float", newvarname) >>> st_store(., idx, b) >>> } >>> exit >>> nn >>> >>> when I run, stata isn't happy and throws back >>> <istmt>: 3499 do_trend_var() not found >>> r(3499); >>> >>> Any idea? >> >> (1) You are not defining the program nn. >> (2) You are not going into Mata before defining the function. >> (3) You are not exiting Mata with an -end-, which is required. >> >> The following works. Examples of these constructs are in -ISP- below; the code files are freely downloadable from stata-press.com. >> >> // begin do-file mata1.do >> clear all >> set obs 10 >> forv i=1/5 { >> g bp`i' = runiform() >> } >> capture program drop nn >> prog nn, rclass >> mata: do_trend_var("b", "bp1 bp2 bp3 bp4 bp5") >> list >> end >> version 12 >> mata: >> void function do_trend_var(string scalar newvarname, string scalar varnames) >> { >> real matrix Y >> real colvector b >> real scalar idx >> st_view(Y, ., varnames) >> b = (1..rows(Y))' >> idx = st_addvar("float", newvarname) >> st_store(., idx, b) >> } >> end >> nn * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/statalist/faq * http://www.ats.ucla.edu/stat/stata/

**References**:**Re: st: beginer's mata function in dofile***From:*Christopher Baum <kit.baum@bc.edu>

**RE: st: beginer's mata function in dofile***From:*tashi lama <ltashi32@hotmail.com>

- Prev by Date:
**RE: st: beginer's mata function in dofile** - Next by Date:
**Re: st: Loop-within-loop error while looping over observations for a microsimulation** - Previous by thread:
**RE: st: beginer's mata function in dofile** - Next by thread:
**Re: st: beginer's mata function in dofile** - Index(es):