{smcl} {bf:Mata course: Construction} {hline} {title:Where to put Mata code} {p 4 4 2} Consider the Mata code {com}: st_view(X=., ., ("weight", "foreign", "one")) : st_view(y=., ., "mpg") : invsym(cross(X,X))*cross(X,y){txt} {p 4 4 2} What do we do with it? {title:1. Put it a do-file} {hline 29} myfile.do {hline 3} {cmd}clear sysuse auto mata: st_view(X=., ., ("weight", "foreign", "one")) st_view(y=., ., "mpg") invsym(cross(X,X))*cross(X,y) end {txt}{hline 29} myfile.do {hline 3} {title:2. Put it in an ado-file} {hline 29} myreg.ado {hline 3} {cmd}program myreg version 9 syntax varlist [if] [in] marksample touse tempvar one qui gen byte one=1 mata: myreg("`varlist' one", "`touse'") end version 9 mata: function myreg(string scalar varnames, string scalar touse) {c -(} string rowvector vars, rhsvars string scalar lhsvar real matrix X real colvector y vars = tokens(varnames) lhsvar = vars[1] rhsvars = vars[|2\.|] st_view(X, ., rhsvars, touse) st_view(y, ., lhsvar, touse) invsym(cross(X,X))*cross(X,y) {c )-} end{txt} {hline 29} myreg.ado {hline 3} {p 4 4 2} Also see {bf:{view hsearch.ado:hsearch.ado}}. {title:Put it in a .mo file} {hline 29} makemyreg.do {hline 3} {cmd}clear version 9 mata: function myreg(string scalar varnames, string scalar touse) {c -(} string rowvector vars, rhsvars string scalar lhsvar real matrix X real colvector y vars = tokens(varnames) lhsvar = vars[1] rhsvars = vars[|2\.|] st_view(X, ., rhsvars, touse) st_view(y, ., lhsvar, touse) invsym(cross(X,X))*cross(X,y) {c )-} mata mosave myreg(), replace end{txt} {hline 29} makemyreg.do {hline 3} {hline 29} myreg.ado {hline 3} {cmd}program myreg version 9 syntax varlist [if] [in] marksample touse tempvar one qui gen byte one=1 mata: myreg("`varlist' one", "`touse'") end{txt} {hline 29} myreg.ado {hline 3} {title:4. Put it in a .mlib library} {hline 29} addmyreg.do {hline 3} {cmd}clear version 9 mata: function myreg(string scalar varnames, string scalar touse) {c -(} string rowvector vars, rhsvars string scalar lhsvar real matrix X real colvector y vars = tokens(varnames) lhsvar = vars[1] rhsvars = vars[|2\.|] st_view(X, ., rhsvars, touse) st_view(y, ., lhsvar, touse) invsym(cross(X,X))*cross(X,y) {c )-} mata mlib create lmylib, replace mata mlib add lmylib myreg() end{txt} {hline 29} addmyreg.do {hline 3} {hline 29} myreg.ado {hline 3} {cmd}program myreg version 9 syntax varlist [if] [in] marksample touse tempvar one qui gen byte one=1 mata: myreg("`varlist' one", "`touse'") end{txt} {hline 29} myreg.ado {hline 3} {hline} {bf:{view talk.smcl:Top}}