use mroz; read all into y var{lwage}; read all into x var{one educ exper exper2}; read all into x1 var{educ}; /* instrument matrix includes all external and internal exogenous variables */ read all into z var {one exper exper2 mothereduc fathereduc}; * iv; read all into z1 var {mothereduc fathereduc}; * external iv; read all into z2 var {one exper exper2}; * included iv; rname = {one educ exper exper2}; /* 2SLS Module */ *===============; start tsls; n=nrow(y); k=ncol(x); k1=ncol(x1); l=ncol(z); l1=ncol(z1); xhat=z*inv(z`*z)*z`*x; biv=inv(xhat`*xhat)*xhat`*y; ehat=y-x*biv; sig2iv=ehat`*ehat/(n-k); covbiv=sig2iv*inv(xhat`*xhat); se=sqrt(vecdiag(covbiv)); tstat=biv/se; pval=2*(1-probt(abs(tstat),n-k)); result=biv||se||tstat||pval; cname={est se tstat pval}; print / "2sls",, result [rowname=rname colname=cname format=13.6]; finish; run tsls;