program drop glsproc3
program define glsproc3

**************************************************************
* GLSPROC PROCEDURE HAS BEEN DEFINED BELOW                   *     
*                                                            *
* GENERALIZED LEAST SQUARES PROCEDURE                        *
**************************************************************
syntax [varlist]
 
*mat IMAT=I(NS)
*mat TMAT=I(T)
*mat JMAT=J(T,T,1/T)
*mat list JMAT

set matsize 400 
mkmat y, mat(YMAT)
mkmat x1, mat(X1MAT)
mkmat x2, mat(X2MAT)
scalar RhoGM=RhoGM
mat GMAT=TMAT#(IMAT-RhoGM*MMAT)
mat YSMAT=GMAT*YMAT
mat X1SMAT=GMAT*X1MAT
mat X2SMAT=GMAT*X2MAT
mat OMGINV   = (1/(SIGVV^0.5))*Q0 + (1/(SIG11^0.5))*Q1
mat YTSMAT   = OMGINV*YSMAT
mat X1TSMAT  = OMGINV*X1SMAT
mat X2TSMAT  = OMGINV*X2SMAT


svmat YTSMAT, n(YTS)
svmat X1TSMAT, n(X1TS)
svmat X2TSMAT, n(X2TS)
quietly reg YTS X1TS X2TS, noconstant
predict u, resid
gen u2=u^2
egen ss2=sum(u2)
scalar SHFGLS=ss2/(NS-1)
scalar AHFGLS=_b[X1TS]
scalar BHFGLS=_b[X2TS]

end
exit
