Statalist


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

Re: st: using vector notation to simplify coding


From   Dan Waldo <dwaldo@aresearch.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: using vector notation to simplify coding
Date   Wed, 12 Aug 2009 11:04:34 -0400

Thanks for the clarification, Kit. I am having trouble shaking the SAS mindset on this stuff, and your note, along with Michael's, have helped a lot. I "get" the mata approach, being a old Fortran guy ...it feels like a cumbersome solution in Stata right now, but I am sure that is a transitory feeling.

Dan

Kit Baum wrote:
<>
Michael suggested a suggestion using local macros. Another way to skin this cat would be via Mata (borrowing Michael's setup code)

clear
mata:mata clear
set obs 100
// six observations per case with an income and month number for each obs
forvalues i = 1/6 {
    gen ing_`i' = 100000 * runiform()
    gen mes_`i' = round((runiform()*(6-1))+1)
}

su ing*
forv i=1/6 {
    local ingl "`ingl' ing_`i'"
    local mesl "`mesl' mes_`i'"
}
mata
// fill in with deflators for each calendar month
def = ( 1, 1.1, 1.2, 1.3, 1.4, 1.3, 1.2, 1.1, 1, 1.1, 1.2, 1.3)
st_view(Y=., ., st_local("ingl"))
st_view(M=., ., st_local("mesl"))
for(j=1;j<=rows(Y);j++) {
    for(i=1;i<7;i++) {
        Y[j,i] = Y[j,i] :/ def[M[j,i]]
    }
}
end
su ing*

Kit Baum | Boston College Economics & DIW Berlin | http://ideas.repec.org/e/pba1.html An Introduction to Stata Programming | http://www.stata-press.com/books/isp.html An Introduction to Modern Econometrics Using Stata | http://www.stata-press.com/books/imeus.html



On Aug 12, 2009, at 02:33 , Dan wrote:

I have data in monthly expenditures in variables ing_1 through ing_6, and survey months in variables mes_1 through mes_6 (these vary from respondent to respondent). I wish to adjust the monthly expenditures for inflation, and I have deflation factors in variables def_1 through def_12.

I am pretty accomplished in SAS, but only a novice in Stata. In SAS I would say:

array def {12} def_1 - def_12;
array ing {6} ing_1 - ing_6;
array mes {6} mes_1 - mes_6;
do t=1 to 6;
  month=mes{t};
  ing{t}=ing{t}/def{month};
  end;

*
*   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/



--
Daniel Waldo
Actuarial Research Corporation
5950 Symphony Woods Road, Suite 510
Columbia, Maryland 21044
410.740.9194 ext 19

*
*   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/



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