Statalist The Stata Listserver


[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

[no subject]



 void fe() {
   stata("drop _all")
   stata("use c:\data\nicolas\select\sas\testing")
   y  = st_data(., "f_week_hours")
   x  = st_data(., ("f_lnwage", "m_lnwage", "assetinc"))
   s  = st_data(., "s_init")
   s  = s:==1  //skip this line if s is 0/1 already
   y  = y:*s
   x  = x:*s
 }

although it may be faster to first create modified variables in Stata
(i.e. set the variables to zero for cases with "s_init" unequal 1) and
then just read these variables.

But do you really need the cases with "s_init" unequal 1 in y and x?
Wouldn't it be better for your application to just include cases with 
s_init==1 in y and x? Assuming that "s_init" is 0/1, the code for this
would be

 void fe() {
   stata("drop _all")
   stata("use c:\data\nicolas\select\sas\testing")
   y  = st_data(., "f_week_hours", "s_init")
   x  = st_data(., ("f_lnwage", "m_lnwage", "assetinc"), "s_init")
 }

or if you prefer views

 void fe() {
   stata("drop _all")
   stata("use c:\data\nicolas\select\sas\testing")
   st_view(y=., ., "f_week_hours", "s_init")
   st_view(x=., ., ("f_lnwage", "m_lnwage", "assetinc"), "s_init")
 }

If "s_init" isn't 0/1, then do something like 

 void fe() {
   stata("drop _all")
   stata("use c:\data\nicolas\select\sas\testing")
   stata("gen byte touse = s_init==1")
   y  = st_data(., "f_week_hours", "touse")
   x  = st_data(., ("f_lnwage", "m_lnwage", "assetinc"), "touse")
 }

ben

> -----Original Message-----
> From: [email protected] [mailto:owner-
> [email protected]] On Behalf Of AbdelRahmen El Lahga
> Sent: Tuesday, February 21, 2006 1:03 AM
> To: [email protected]
> Subject: st: writing mata code more effeciently
> 
> Is there any solution to rewrite this fragment of my mata code more
> efficiently. My old laptop runs more then 1 hours without finishing
the
> job
> on 50591 obs.
> below the code:
> version 9.1
> mata:
> mata clear
> void fe () {
> stata ("drop _all")
> stata ("use c:\data\nicolas\select\sas\testing")
> y_init=x_init=s_init=.
> st_view(y_init, .,  "f_week_hours")
> st_view(x_init, ., ("f_lnwage", "m_lnwage", "assetinc"))
> st_view(s_init, ., "s_init")
> tmax=21 // tmax
> n=rows(x_init)/tmax  // nombre d'individus
> nt=rows(x_init)         //nombre total des lignes
> k=cols(x_init)           // nombre de regresseurs
> k
> y=J(nt,1,0)
> x=J(nt,k,0)
> s=s_init
> for (i=1;i=nt;i++) {
> if (s[i]=1) {
> y[i,.]= y_init[i,.]
> x[i,.]= x_init[i,.]
> }
> }
> }
> fe ()
> end
> PS: When i use st_data instead of st_view I get the follwing error:
>  fe():  3257  nonpointer found where pointer required
>                  <istmt>:     -  function returned error
> Any help
> 
> *
> *   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/



© Copyright 1996–2024 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index