Bookmark and Share

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]

Re: st: Converting a SAS datastep to Stata


From   Daniel Feenberg <feenberg@nber.org>
To   statalist@hsphsun2.harvard.edu
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 <feenberg@nber.org> :
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/


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