I have a do-file (Testing ceqef.do, attached) which I'm using to test an ado-file (ceqef.ado, attached). For the sake of simplicity, I copy the relevant part of the ado-file:
Code:
if (wordcount("`tax_`rw'_`cc''")>0 | wordcount("`ben_`rw'_`cc''")>0){ ; // #1
*impact effectiveness;
/*if wordcount("`benef'")>0{;
ceqbenstar [w=`w'], endinc(``cc'') ben(`benef');
};
if wordcount("`taxesef'")>0{;
ceqtaxstar [w=`w'], endinc(``cc'') taxes(`taxesef');
};*/
if (wordcount("`tax_`rw'_`cc''")>0 & wordcount("`ben_`rw'_`cc''")>0) {; // #2
tempvar ystar;
gen double `ystar'=``rw'';
*set trace on ;
ceqtaxstar `pw', startinc(``rw'') taxes(`taxesef');
*set trace off ;
local twarn = 0 ;
if r(t_gr) == 1{ ;
nois `dit' "Sum of `tname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator not produced from ``rw'' to ``cc''" ;
local warning `warning' "Sum of `tname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator not produced from ``rw'' to ``cc''" ;
local twarn = r(t_gr) ;
} ;
else if r(t_0) == 1{ ;
nois `dit' "Sum of `tname_`rw'_`cc'' is 0, so impact effectiveness indicator not produced from ``rw'' to ``cc''" ;
local warning `warning' "Sum of `tname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator not produced from ``rw'' to ``cc''" ;
local twarn = r(t_0) ;
} ;
ceqbenstar `pw', startinc(``rw'') ben(`benef');
local bwarn = 0 ;
if r(b_gr) ==1 { ;
nois `dit' "Sum of `bname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator for ``rw'' to ``cc'' excludes benefits or is not produced" ;
local warning `warning' "Sum of `bname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator for ``rw'' to ``cc'' excludes benefits or is not produced" ;
local bwarn = r(b_gr) ;
} ;
else if r(b_0) ==1 { ;
nois `dit' "Sum of `bname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator for ``rw'' to ``cc'' excludes benefits or is not produced" ;
local warning `warning' "Sum of `bname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator for ``rw'' to ``cc'' excludes benefits or is not produced" ;
local bwarn = r(b_0) ;
} ;
if `bwarn' == 0 & `twarn' == 0 { ;
replace `ystar'=____ybenstar if ____id_benstar==1 & ____id_taxstar!=1;
replace `ystar'=____ytaxstar if ____id_taxstar==1 & ____id_benstar!=1;
tempvar temptax;
gen double `temptax'=``rw''- ____ytaxstar if ____id_benstar==1 & ____id_taxstar==1;
tempvar tempben;
gen double `tempben'= ____ybenstar - ``rw'' if ____id_benstar==1 & ____id_taxstar==1;
replace `ystar'=``rw'' - `temptax' +`tempben' if ____id_benstar==1 & ____id_taxstar==1;
cap drop ____ytaxstar ____ybenstar ____id_benstar ____id_taxstar ;
cap drop `temptax' `tempben';
};
else { ;
local bwarn = 1 ;
local twarn = 1 ;
};
};
if (wordcount("`tax_`rw'_`cc''")>0 & wordcount("`ben_`rw'_`cc''")==0) {; // #3
*set trace on;
ceqtaxstar `pw' , startinc(``rw'') taxes(`taxesef') ;
*set trace off;
local twarn = 0 ;
if r(t_gr) ==1 { ;
nois `dit' "Sum of `tname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator not produced from ``rw'' to ``cc''" ;
local warning `warning' "Sum of `tname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator not produced from ``rw'' to ``cc''" ;
local twarn = r(t_gr) ;
} ;
else if r(t_0) ==1 { ;
nois `dit' "Sum of `tname_`rw'_`cc'' is 0, so impact effectiveness indicator not produced from ``rw'' to ``cc''" ;
local warning `warning' "Sum of `tname_`rw'_`cc'' is 0, so impact effectiveness indicator not produced from ``rw'' to ``cc''" ;
local twarn = r(t_0) ;
} ;
else !(r(t_0) == 1 | r(t_gr) == 1) {;
tempvar ystar;
gen double `ystar'=____ytaxstar;
cap drop ____ytaxstar ____ybenstar ____id_benstar ____id_taxstar;
};
};
if (wordcount("`tax_`rw'_`cc''")==0 & wordcount("`ben_`rw'_`cc''")>0) {; // #4
ceqbenstar `pw', startinc(``rw'') ben(`benef');
local bwarn = 0 ;
if r(b_gr) == 1 { ;
nois `dit' "Sum of `bname_`rw'_`cc'' is 0, so impact effectiveness indicator not produced from ``rw'' to ``cc''" ;
local warning `warning' "Sum of `bname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator not produced from ``rw'' to ``cc''" ;
local bwarn = r(b_gr) ;
} ;
else if r(b_0) == 1 { ;
nois `dit' "Sum of `bname_`rw'_`cc'' is 0, so impact effectiveness indicator not produced from ``rw'' to ``cc''" ;
local warning `warning' "Sum of `bname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator not produced from ``rw'' to ``cc''" ;
local bwarn = r(b_0) ;
} ;
if !(r(b_0) == 1 | r(b_gr) == 1) {;
tempvar ystar;
gen double `ystar'=____ybenstar;
cap drop ____ytaxstar ____ybenstar ____id_benstar ____id_taxstar;
};
};
if (!( "`bwarn'" == "1" & "`twarn'" == "1" )) { ; // #5
covconc ``cc'' `pw'; //gini of column income;
local g1_`cc'=r(gini);
di "`rw' ``rw''";
covconc ``rw'' `pw'; //gini of row income;
local g2_`rw'=r(gini);
covconc `ystar' `pw'; //gini of star income;
local g_star=r(gini);
local imef=(`g2_`rw''-`g1_`cc'')/(`g2_`rw''-`g_star');
matrix `rw'_ef[1,`_`cc'']=`imef';
};- if (wordcount("`tax_`rw'_`cc''")>0 | wordcount("`ben_`rw'_`cc''")>0){ // #1
= if (wordcount("")>0 | wordcount("")>0){ // #1
if (wordcount("`tax_`rw'_`cc''")>0 & wordcount("`ben_`rw'_`cc''")>0) { // #2
tempvar ystar
gen double `ystar'=``rw''
ceqtaxstar `pw', startinc(``rw'') taxes(`taxesef')
local twarn = 0
if r(t_gr) == 1{
nois `dit' "Sum of `tname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator not produced from
> ``rw'' to ``cc''"
local warning `warning' "Sum of `tname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator not
> produced from ``rw'' to ``cc''"
local twarn = r(t_gr)
}
else if r(t_0) == 1{
nois `dit' "Sum of `tname_`rw'_`cc'' is 0, so impact effectiveness indicator not produced from ``rw'' t
> o ``cc''"
local warning `warning' "Sum of `tname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator not
> produced from ``rw'' to ``cc''"
local twarn = r(t_0)
}
ceqbenstar `pw', startinc(``rw'') ben(`benef')
local bwarn = 0
if r(b_gr) ==1 {
nois `dit' "Sum of `bname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator for ``rw'' to ``c
> c'' excludes benefits or is not produced"
local warning `warning' "Sum of `bname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator for
> ``rw'' to ``cc'' excludes benefits or is not produced"
local bwarn = r(b_gr)
}
else if r(b_0) ==1 {
nois `dit' "Sum of `bname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator for ``rw'' to ``c
> c'' excludes benefits or is not produced"
local warning `warning' "Sum of `bname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator for
> ``rw'' to ``cc'' excludes benefits or is not produced"
local bwarn = r(b_0)
}
if `bwarn' == 0 & `twarn' == 0 {
replace `ystar'=____ybenstar if ____id_benstar==1 & ____id_taxstar!=1
replace `ystar'=____ytaxstar if ____id_taxstar==1 & ____id_benstar!=1
tempvar temptax
gen double `temptax'=``rw''- ____ytaxstar if ____id_benstar==1 & ____id_taxstar==1
tempvar tempben
gen double `tempben'= ____ybenstar - ``rw'' if ____id_benstar==1 & ____id_taxstar==1
replace `ystar'=``rw'' - `temptax' +`tempben' if ____id_benstar==1 & ____id_taxstar==1
cap drop ____ytaxstar ____ybenstar ____id_benstar ____id_taxstar
cap drop `temptax' `tempben'
}
else {
local bwarn = 1
local twarn = 1
}
}
if (wordcount("`tax_`rw'_`cc''")>0 & wordcount("`ben_`rw'_`cc''")==0) { // #3
ceqtaxstar `pw' , startinc(``rw'') taxes(`taxesef')
local twarn = 0
if r(t_gr) ==1 {
nois `dit' "Sum of `tname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator not produced from
> ``rw'' to ``cc''"
local warning `warning' "Sum of `tname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator not
> produced from ``rw'' to ``cc''"
local twarn = r(t_gr)
}
else if r(t_0) ==1 {
nois `dit' "Sum of `tname_`rw'_`cc'' is 0, so impact effectiveness indicator not produced from ``rw'' t
> o ``cc''"
local warning `warning' "Sum of `tname_`rw'_`cc'' is 0, so impact effectiveness indicator not produced
> from ``rw'' to ``cc''"
local twarn = r(t_0)
}
else !(r(t_0) == 1 | r(t_gr) == 1) {
tempvar ystar
gen double `ystar'=____ytaxstar
cap drop ____ytaxstar ____ybenstar ____id_benstar ____id_taxstar
}
}
- if (wordcount("`tax_`rw'_`cc''")==0 & wordcount("`ben_`rw'_`cc''")>0) { // #4
= if (wordcount("")==0 & wordcount("")>0) {
ceqbenstar `pw', startinc(``rw'') ben(`benef')
local bwarn = 0
if r(b_gr) == 1 {
nois `dit' "Sum of `bname_`rw'_`cc'' is 0, so impact effectiveness indicator not produced from ``rw'' t
> o ``cc''"
local warning `warning' "Sum of `bname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator not
> produced from ``rw'' to ``cc''"
local bwarn = r(b_gr)
}
else if r(b_0) == 1 {
nois `dit' "Sum of `bname_`rw'_`cc'' is 0, so impact effectiveness indicator not produced from ``rw'' t
> o ``cc''"
local warning `warning' "Sum of `bname_`rw'_`cc'' exceed ``rw'', so impact effectiveness indicator not
> produced from ``rw'' to ``cc''"
local bwarn = r(b_0)
}
if !(r(b_0) == 1 | r(b_gr) == 1) {
tempvar ystar
gen double `ystar'=____ybenstar
cap drop ____ytaxstar ____ybenstar ____id_benstar ____id_taxstar
}
}
- assert !( "`bwarn'" == "1" & "`twarn'" == "1" )
= assert !( "" == "1" & "" == "1" )
- pause: pause2
pause: : pause2
-> . q
execution resumes...
- if (!( "`bwarn'" == "1" & "`twarn'" == "1" )) { // #5
= if (!( "" == "1" & "" == "1" )) {
- covconc ``cc'' `pw'
= covconc OI [pw = __000001]
- local g1_`cc'=r(gini)
= local g1_mp=r(gini)
- di "`rw' ``rw''"
= di "m OI"
- covconc ``rw'' `pw'
= covconc OI [pw = __000001]
- local g2_`rw'=r(gini)
= local g2_m=r(gini)
- covconc `ystar' `pw'
= covconc [pw = __000001]
varlist required
local g_star=r(gini)
local imef=(`g2_`rw''-`g1_`cc'')/(`g2_`rw''-`g_star')
matrix `rw'_ef[1,`_`cc'']=`imef'
}
Since I set the trace on, you can clearly see which -if- statements run. I really don't understand why. I've checked multiple times if all the -if- statements were properly closed, and as far as I can tell, they are. Can you think of another reason why this -if- statement is not working as it should (others in the ado-file work perfectly fine)?
Many thanks in advance for your help!
0 Response to Stata evalautes what comes after an if statement that it's not true
Post a Comment