Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: st: Converting a SAS datastep to Stata
From 
 
Daniel Feenberg <[email protected]> 
To 
 
[email protected] 
Subject 
 
Re: st: Converting a SAS datastep to Stata 
Date 
 
Tue, 14 Dec 2010 20:16:28 -0500 (EST) 
On Tue, 14 Dec 2010, Austin Nichols wrote:
Daniel Feenberg <[email protected]> :
No Mata required; try out this example:
clear
range yr 1993 2010 18
mat x=(2350,2450,2500,2550,2650,2700,2750,2800,2900,3000,3050,3100,3200,3300,3400,3500)
g ex=x[1,yr-1992]
list
This seems very on-point and is my current plan.
But it would be faster to do all the tax calculations in Mata, first
moving the data into Mata.  See also
http://www.stata-journal.com/sjpdf.html?articlenum=pr0017
on translating Fortran into Mata.
Looking at the article, it is oriented towards a person who is weak in 
Fortran, and strong in Mata, not my situation.  The tax code isn't very 
much like an analytical function, and I would anticipate many instances 
where I would have to loop over tax returns with conditional statements. I 
recall that clever APL programmers were often able to convert program 
control structures into matrix algebra, but I fear that would require time 
and talent I don't have.
Even in Stata, I am worried a bit about translating block if statements. 
The SAS block:
   if flpdyr > 1993 & flpdyr < 1998 then do;
       lvalue1 = expr1;
       lvalue2 = expr2;
    end;
could  be translated to:
   gen sample = 1, if flpdyr >1993 & flpdyr < 1998
   gen lvalue1 = expr1, if sample
   gen lvalue2 = expr2, if sample
but that requires redundant and repetive code. There are many blocks and 
some are 50 to 100 lines long. I am still surprised there isn't any syntax 
to apply the "if qualifier" to a block of code, and the ability to nest 
such blocks. Or am I missing something again?
I can see that in Mata there is such syntax, but apparently only if one 
loops over the observations, which I wish to avoid.
Daniel Feenberg
*
*   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/