*! 1.1.0 Ariel Linden 24Jul2025
*! 1.0.0 Ariel Linden 11Jun2025

capture program drop power_sim_multi_itsa
program define power_sim_multi_itsa, rclass
        version 11

    syntax , n(integer) 		/// number of periods
			CINTercept(real) 	/// starting level - controls
			CPOSTtrend(real) 	/// post-intervention trend - controls
			TINTercept(real) 	/// starting level - treated
			TPOSTtrend(real) 	/// post-intervention trend	- treated		
			[ TRPeriod(string)	/// the treatment period when the intervention begins
			CONTCnt(int 1)		/// count of controls
			CPREtrend(real 0)	/// baseline trend - controls
			CSTep(real 0) 		/// post-intervention change in level - controls			
			CSD(real 1)			/// standard deviation for variability of time series - controls
			CACorr(real 0)		/// autocorrelation (rho) - controls
			TPREtrend(real 0)	/// baseline trend - treated
			TSTep(real 0) 		/// post-intervention change in level - treated			
			TSD(real 1)			/// standard deviation for variability of time series - treated
			TACorr(real 0)		/// autocorrelation (rho) - treated
			Alpha(real 0.05)	/// alpha level			
			LEVel ]				//  level or trend change
   
			if "`trperiod'" == "" {
				local trperiod = ceil(`n' / 2)
			}
   
			// first dataset is for treated unit
			itsadgp, ntime(`n') trperiod(`trperiod') intercept(`tintercept') pretrend(`tpretrend') posttrend(`tposttrend') step(`tstep') sd(`tsd') rho(`tacorr')
			gen z = 1
			gen id = 1

			tempfile dgp1
			save `dgp1', replace

			// controls dataset
			local contmax = `contcnt' + 1
			forvalues i = 2/`contmax' {
				itsadgp, ntime(`n') trperiod(`trperiod') intercept(`cintercept') pretrend(`cpretrend') posttrend(`cposttrend') step(`cstep') sd(`csd') rho(`cacorr')
				gen z = 0	
				gen id = `i'
				
				tempfile dgp`i'
				save `dgp`i'', replace
			}
				
			use `dgp1', replace	
				forvalues i = 2/`contmax' { 
				append using "`dgp`i''"
			}

			tsset id t
			
			itsa y , treat(1) trperiod(`trperiod') lag(1)
			
		
			// choose the desired outcome - change in level or change in trend
			if "`level'" == "" {
				test _z_x_t`trperiod'			
			}
			else {
				test _z_x`trperiod'
			}	
			return scalar reject = (r(p)<`alpha') 
			

end