*! version 2.10 06June2014 M. Araar Abdelkrim & M. Paolo verme
/*************************************************************************/
/* SUBSIM: Subsidy Simulation Stata Toolkit  (Version 2.1)               */
/*************************************************************************/
/* Conceived by Dr. Araar Abdelkrim[1] and Dr. Paolo Verme[2]            */
/* World Bank Group (2012-2014)		                                 */
/* 									 */
/* [1] email : aabd@ecn.ulaval.ca                                        */
/* [1] Phone : 1 418 656 7507                                            */
/*									 */
/* [2] email : pverme@worldbank.org                                      */
/*************************************************************************/




#delimit ;
capture program drop incsub;
program define incsub, rclass ;
version 9.2;
syntax varlist(min=1 max=1)[ ,   IPSCH(string) hsize(varname)];

local n    =  `.`ipsch'.nblock'; 
local bun  =  `.`ipsch'.bun'; 
local n1 = `n' - 1;
if r(N)<`n' qui set obs `n';
tempvar q p1 sub1 s rev ran;
qui gen `q' = .;
qui gen `p1' = .;
qui gen `sub1' = .;
qui gen `rev' = .;
qui gen `ran' = .;

qui count;

forvalues i = 1/`n' {;
qui replace `q'    = `.`ipsch'.blk[`i'].max'       in `i' ;
qui replace `p1'   = `.`ipsch'.blk[`i'].price'     in `i' ;
qui replace `sub1' = `.`ipsch'.blk[`i'].subside'   in `i' ;
};

//list `q' `p1' `sub1' in 1/`n';


forvalues i = 1/`n' {;
local sb`i' = `sub1'[`i']/`p1'[`i'];
};


local se1=`q'[1]*`p1'[1];
local basev1=0;
forvalues i = 2/`n' {;
local j  = `i'-1;
local se`i' = `se`j'' + (`q'[`i']-`q'[`i'-1])*`p1'[`i'];
};


local ex1= `q'[1]*`p1'[1];
forvalues i = 2/`n' {;
local ex`i'= (`q'[`i']-`q'[`i'-1])*`p1'[`i'];
};

tempvar bexp;
if `bun'==1 qui gen `bexp' = `1'*`hsize';
if `bun'==2 qui gen `bexp' = `1';

tempvar class ;
qui gen `class' = 1;
if `n1' > 1 {;
forvalues i = 2/`n1' {;
local j=`i'-1;
 qui replace `class' = `i'  if (`bexp'>`se`j'' & `bexp'<=`se`i'') ;
};

};

if `n' >= 2 qui replace `class' = `n'         if (`bexp'>`se`n1'')  ;

tempvar svar ;
qui gen `svar' = 0 ;


qui replace `svar' = `bexp'*`sb1'                                                      if `class'==1; 
forvalues i = 2/`n' {;
local k = `i'-1;
forvalues j = 1/`k' {;
qui replace `svar' = `svar' + `ex`j''*`sb`j''							              if `class'==`i'; 
};
qui replace `svar' = `svar' + (`bexp'-`se`k'')*`sb`i''                                if `class'==`i'; 
};

 
cap drop __esub;

if `bun'==1   qui gen  __esub=`svar' / `hsize';
if `bun'==2   qui gen  __esub=`svar';
end;