LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous messageNext messagePrevious in topicNext in topicPrevious by same authorNext by same authorPrevious page (April 1996, week 2)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:         Mon, 8 Apr 1996 14:33:05 -0400
Reply-To:     Xiancheng Lu <XLU@PHNET.SPH.JHU.EDU>
Sender:       "SAS(r) Discussion" <SAS-L@UGA.CC.UGA.EDU>
From:         Xiancheng Lu <XLU@PHNET.SPH.JHU.EDU>
Subject:      Heckman Two-Step Estimation ('Heckit') -Reply
Comments: To: Joe_Emmim@FREDDIEMAC.COM

Hi joe:

This is a Macro to calculated second step of Heckman two-step linear problem.

You have to run the 1st step by yourself and get the predicted value (which is very simple).

It runs well on PC. Make sure, there are no missing value.

I am sorry, I have no further time to help you with that macro.

Good luck.

Jack.

------------------- 2SWMCR13.SAS follows -------------------- /* This is the 12th modification of this two stage linear macro */ /* February 7, 1996 --Xiancheng */ /* Similar to 2SWMACR10.SAS except: */ /* 1. using observation do-loop to */ /* calculate XTX & XTY to save memory. */ /* 2. add un-adjusted std errors estimation (regular ols) */ /* 3. add P-value */

/*******************************************************************/ /* this program calculates white's variance estimator which is */ /* robust to heteroskedasticity. This was written for a 2SLS */ /* model so it contains a correction for the error terms. */ /* 2nd stage reg with errors caluclated from EQN 5.25 GODFREY */ /*******************************************************************/

/* In order to invoke the MACRO, you must write a front */ /* end SAS program that contains the following lines of code: */ /* */ /* DATA ONE; */ /* SET INPUT SASFILE; */ /* FILENAME MAC 'C:\NIAAA\TWOSTAGE\2SWMCR10.SAS'; */ /* %INCLUDE MAC; */ */ /* %TSWHITE (DATA = INPUT SASFILE (WHICH MUST CONTAIN AN INTERCEPT), */ /* YVAR = DEPENDENT VARIABLE, */ /* XVAR = LIST OF EXPLANATORY VARIABLES INCLUDING THE */ /* PREDICTED ENDOG. VARIABLE FROM THE 1ST STAGE, */ /* (SEPARATE VAR NAMES WITH BLANKS) */ /* NEWXVAR = LIST OF EXPLANATORY VARIABLES THAT CONTAINS THE */ /* NAME OF THE VARIABLE WHICH IS THE ACTUAL VALUE OF */ /* THEN ENDOG. VARIABLE(S), */ /* OUTBETA = NAME OF SASFILE THAT WILL CONTAIN ESTIMATED BETAS,*/ /* OUTCOV = NAME OF SASFILE THAT WILL CONTAIN ESTIMATED COV */ /* MATRIX); */ /**********************************************************************/

%MACRO TSWHITE (DATA= _LAST_, YVAR = Y, XVAR= X, NEWXVAR = NEWX, OUTBETA = _NULL_, OUTCOV = _NULL_ );

PROC IML; RESET NONAME ; START ESTCOVW; USE &DATA; /* CONTAINS PREDICTED ENDOG VAR FOR ALLSELFD */ SETIN &DATA NOBS NOBS;

labelx = {&XVAR}; labely = {&YVAR};

/* The following new codes using observation do-loop to calculat */ /* the same matrix. */ /* It uses less memory but time consuming */

READ VAR labelx INTO XVAR point 1; read var labely into yvar point 1;

NUMVAR=NCOL(XVAR); XTX=J(NUMVAR,NUMVAR,0); XTY=J(NUMVAR,1,0);

XTX=(XVAR` * XVAR); XTY=(XVAR` * YVAR);

do i = 2 to nobs; READ VAR labelx INTO XVAR point i; read var labely into yvar point i; XTX=xtx + (XVAR` * XVAR); XTY=xty + (XVAR` * YVAR); FREE xvar yvar; END;

BETA=SOLVE(XTX,XTY); PRINT ' BETA FINISTHED' ;

FREE XTY xvar yvar;

SETIN &DATA NOBS NOBS; LABELX2 = {&NEWXVAR}; W3=J(NUMVAR,NUMVAR,0);

/* using observation do loop to same memory */

do i = 1 to nobs; READ VAR labelx INTO XVAR point i; READ VAR LABELX2 INTO NEWXVAR POINT I; READ VAR labely INTO yvar POINT I; CRESSQ = (YVAR - (NEWXVAR * BETA))**2; W3 = W3 + (XVAR` * CRESSQ * XVAR); FREE xvar yvar NEWXVAR; END;

PRINT 'W3 FINISHED';

PRINT 'NOBS=' NOBS; PRINT 'NUMBER OF VARIABLES=' NUMVAR;

PRINT 'DEPENDENT VARIABLE=' LABELY;

/* CALCULATE ESTIMATED VARIANCE OF REGRESSION. THIS WILL BE USED */ /* TO CALCULATE THE NAIVE STD ERRORS. THESE CAN BE CHECKED AGAINST */ /* TSLS OUTPUT TO BE SURE THAT CODE IS CORRECT. */

FREEDOM = NOBS - NUMVAR -1;

COLX=LABELX`; FREE LABELX;

INVXTX = (INV(XTX)); FREE XTX;

RC1 = (INVXTX * W3); FREE W3;

RCOVBETA = (RC1 * INVXTX); FREE RC1 INVXTX;

RVARBETA = VECDIAG(RCOVBETA); FREE RCOVBETA;

*** SUBMATCV=RCOVBETA(|2:56,2:56|); * CREATE &outcov FROM rcovbeta; * APPEND FROM rcovbeta;

* NSTDERR = SQRT(NVARBETA); RSTDERR = SQRT(RVARBETA); * NTBETA = BETA/NSTDERR; RTBETA = BETA/RSTDERR;

* PVALUE = 2*(1-PROBT(ABS(NTBETA), FREEDOM)); RPVALUE = 2*(1-PROBT(ABS(RTBETA), FREEDOM));

* PRINT 'ESTIMATED VARIANCE (SSQ OF CORRECTED RESIDS/DF):' SIGMA (|FORMAT=12.8|);

PRINT / '2ND STAGE BETAS WITH STD ERRORS CALCULATED FROM EQN 5.25 GODFREY'; PRINT COLX BETA (|COLNAME={'ESTIMATE'} FORMAT=15.12|) RSTDERR (|COLNAME={'ROBUST SE'} FORMAT=15.12|) RTBETA (|COLNAME={'ROBUST T'} FORMAT=15.12|) RPVALUE (|COLNAME={'Prob >|T|'} FORMAT=15.12|) ,;

FREE /;

close &data;

show names;

FINISH;

RUN ESTCOVW;

%MEND;


Back to: Top of message | Previous page | Main SAS-L page