The paper "Exploiting Information From Singleton in Panel Data Analysis" (joint with RL Bruno and M Stampini) has been published in Economics Letters: https://doi.org/10.1016/j.econlet.2019.07.004
We are working to build a STATA command for this estimator.
In this page we share the STATA codes used to perform the Monte Carlo simulations and the empirical analysis reported in the paper.
Monte Carlo simulations have been obtained using the following program.
We first simulate the observations for the full balanced panel of Ns+Np units, and then randomly assign the unique observation period for the singleton units. FE and GMM estimates are then obtained.
program define bsgmm,  rclass    syntax [, nbal(integer 100) ns(integer 100) tbal(integer 2) delta1(real 1) delta2(real 1) delta3(real 1) sigma2alpha(real 1) sigma2e(real 1)]   drop _all   tempvar iii ttt y x alphai gammai xxi xdemeaned balobs xcs ycs xobs periodoobs   local nobs = (`nbal' + `ns')*`tbal'    set obs `nobs'   * set the unit and time variables   gen `iii' = (ceil(_n/`tbal'))   gen `ttt' = _n-`tbal'*(`iii'-1)   sort `iii' `ttt'   xtset `iii' `ttt'   * Data generating process   gen `alphai'=invnorm(uniform()) if `ttt'==1   by `iii': replace `alphai' = `alphai'[1]   gen `gammai'=invnorm(uniform()) if `ttt'==1   by `iii': replace `gammai' = `gammai'[1]   gen `x' = `delta1' * `alphai' + `delta2' * `gammai' + `delta3'*invnorm(uniform())   gen `y' = `x' + sqrt(`sigma2alpha')*`alphai' + invnorm(uniform())*sqrt(`sigma2e')   drop `alphai' `gammai'   * Randomly assign the period of observation for the singleton units   gen `periodoobs'=runiformint(1,`tbal') if `ttt'==1   by `iii': replace `periodoobs' = `periodoobs'[1]   replace `x'=. if `iii'>`nbal' & `ttt'!=`periodoobs'   replace `y'=. if `iii'>`nbal' & `ttt'!=`periodoobs'      gen `balobs'=0   replace `balobs'=1 if `iii'<=`nbal'      * Within-group estimator    xtreg `y' `x' , fe   return scalar coeffbfe = _b[`x']    * GMM estimator   sort `iii' `ttt'   * Generate demeaned indpendent variable (within-group transformation) to be used as instrument   by `iii': egen `xxi' = mean(`x')   gen `xdemeaned' = `x'-`xxi'   * Generate new variables that only contain values for the singleton units   gen `xcs' = `x' if `iii'>`nbal'   gen `ycs' = `y' if `iii'>`nbal'      * GMM estimtor that allows exploiting information from the singletongmm (consres: `y' - {b1}*`x' -{b0}) (biasres: `y' - ({b1} +{d1})*`x' -({b0}+{d0})) (biasrescs: `ycs' - ({b1} +{d1})*`xcs' -({b0}+{d0})) , ///       instruments(consres: `xdemeaned')  instruments(biasres: `x')  instruments(biasrescs: `xcs' )  twostep  winitial(unadjusted, independent) ///     nocommonesample vce(cluster `iii') wmatrix(cluster `iii') quickderivatives   return scalar coeffb1gmm =  _b[b1:_cons]   return scalar coeffb0gmm =  _b[b0:_cons]   return scalar coeffd1gmm =  _b[d1:_cons]   return scalar coeffd0gmm =  _b[d0:_cons]      end