/* Macro to do pooled and separate variance (Satterthwaite) two sample t tests using summary statistics for input. INPUT: n1,n2: sample sizes y1bar,y2bar: sample means s1,s2: sample std deviations delta0: difference under H0 OUTPUT: For pooled test: df_pool: degreees of freedom se_pool: standard error of difference of means t_pool: observed value of t statistic p_minus_pool, p_plus_pool, p_plusminus_pool: one and two-sided p-values For separate variance (Satterthwaite) test: df_satt: degrees of freedom se_satt: standard error of difference of means t_satt: observed value of t statistic p_minus_satt, p_plus_satt, p_plusminus_satt: one and two-sided p-values */ %macro t2summary(n1,n2,y1bar,y2bar,s1,s2,delta0); data summary; df_pool=&n1+&n2-2; s2p=((&n1-1)*&s1**2+(&n2-1)*&s2**2)/df_pool; se_pool=sqrt(s2p*(1/&n1+1/&n2)); se_satt=sqrt(&s1**2/&n1+&s2**2/&n2); df_satt_num=(&s1**2/&n1+&s2**2/&n2)**2; df_satt_den=(&s1**2/&n1)**2/(&n1-1)+(&s2**2/&n2)**2/(&n2-1); df_satt=int(df_satt_num/df_satt_den); t_pool=(&y1bar-&y2bar-&delta0)/se_pool; t_satt=(&y1bar-&y2bar-&delta0)/se_satt; p_minus_pool=cdf('T',t_pool,df_pool); p_plus_pool=1-p_minus_pool; p_plusminus_pool=2*min(p_minus_pool,p_plus_pool); p_minus_satt=cdf('T',t_satt,df_satt); p_plus_satt=1-p_minus_satt; p_plusminus_satt=2*min(p_minus_satt,p_plus_satt); run; title 'Pooled Variance Results'; proc print noobs; var df_pool se_pool t_pool p_minus_pool p_plus_pool p_plusminus_pool; run; title 'Separate Variance (Satterthwaite) Results'; proc print noobs; var df_satt se_satt t_satt p_minus_satt p_plus_satt p_plusminus_satt; run; title ' '; %mend t2summary; /* This calls the macro for the cutting blade example in the lecture notes: %t2summary(10,13,108.4,134.9,26.9,18.4,0); */