I came across this macro for calculating various effect size statistics, but I am unsure how to use it. Can someone show me how I would input in my data and run this?
For example, I would like to compute Cohen's d and Hedges' g. My values are the following:
NE = 103
NC = 100
ME = 1.44
MC = 1.43
SE = 0.65
SC = 0.59
%macro compeff(indata,outdata);
/******************************************************/
/* INDATA: Name of the Input Data Set */
/* OUTDATA: Name of the Output Data Set */
/******************************************************/
data &outdata; set &indata;
/******************************************************/
/* INPUT DATA: */
/* NE: Sample size for Experimental Group */
/* NC: Sample size for Control Group */
/* ME: Treatment Effect for Experimental Group */
/* MC: Treatment Effect for Control Group */
/* SE: Standard Deviation for Experimental Group */
/* SC: Standard Deviation for Control Group */
/* */
/* OUTPUT DATA: */
/* TYPE: 0 = Glass' Delta */
/* 1 = Cohen's d */
/* 2 = Hedges' g */
/* 3 = Hedges' gu */
/* 4 = Transformed Correlation rpb */
/* ESTIMATE: Effect-Szie Estimate */
/* STD: Estimated Standard deviation */
/* LOWER: Lower Bound of 95% Confidence Interval */
/* UPPER: Upper Bound of 95% Confidence Interval */
/******************************************************/
dfd = ne+nc;
dfg = dfd-2;
/******************************************************/
/* Compute Glass's Delta */
/******************************************************/
del = (me-mc)/sc;
vdel = dfd/(ne*nc)+(del*del)/(2*nc-2);
sdel = sqrt(vdel);
/******************************************************/
/* Compute Cohen's d */
/******************************************************/
sm = sqrt(((ne-1)*(se*se)+(nc-1)*(sc*sc))/dfd);
dd = (me-mc)/sm;
vdd = dfd/(ne*nc)+0.5*dd*dd/dfg;
sdd = sqrt(vdd);
/******************************************************/
/* Compute Hedges' g */
/******************************************************/
sp = sqrt(((ne-1)*(se*se)+(nc-1)*(sc*sc))/dfg);
gg = (me-mc)/sp;
vgg = dfd/(ne*nc)+0.5*gg*gg/dfg;
sgg = sqrt(vgg);
/******************************************************/
/* Compute Hedges' gu */
/******************************************************/
corrf=exp(lgamma(0.5*dfg)-lgamma(0.5*(dfg-1))
-log(sqrt(0.5*dfg)));
gu = gg * corrf;
vgu = dfd/(ne*nc)+0.5*gu*gu/dfd;
sgu = sqrt(vgu);
/*********************************************************/
/* Compute Point-Biserial Correlation */
/*********************************************************/
rpb = sqrt((ne*nc*dd*dd)/(ne*nc*dd*dd+dfd*dfd));
zrpb = 0.5*log((1+rpb)/(1-rpb));
vzrpb = 1 / (dfd-3);
szrpb = sqrt(vzrpb);
type = 0;
estimate = del;
std = sdel;
lower = del + probit(0.025) * sdel;
upper = del + probit(0.975) * sdel;
output;
type = 1;
estimate = dd;
std = sdd;
lower = dd + probit(0.025) * sdd;
upper = dd + probit(0.975) * sdd;
output;
type = 2;
estimate = gg;
std = sgg;
lower = gg + probit(0.025) * sgg;
upper = gg + probit(0.975) * sgg;
output;
type = 3;
estimate = gu;
std = sgu;
lower = gu + probit(0.025) * sgu;
upper = gu + probit(0.975) * sgu;
output;
type = 4;
estimate = rpb;
std = szrpb;
lower = zrpb + probit(0.025) * szrpb;
upper = zrpb + probit(0.975) * szrpb;
lower = (exp(2*lower)-1)/(exp(2*lower)+1);
upper = (exp(2*upper)-1)/(exp(2*upper)+1);
output;
keep ne nc me mc se sc type estimate lower upper;
%mend compeff;
You need to create a dataset according to the description in the comment section:
/* INPUT DATA: */
/* NE: Sample size for Experimental Group */
/* NC: Sample size for Control Group */
/* ME: Treatment Effect for Experimental Group */
/* MC: Treatment Effect for Control Group */
/* SE: Standard Deviation for Experimental Group */
/* SC: Standard Deviation for Control Group */
Like
data in;
input ne nc me mc se sc;
datalines;
103 100 1.44 1.43 0.65 0.59
;
You need to create a dataset according to the description in the comment section:
/* INPUT DATA: */
/* NE: Sample size for Experimental Group */
/* NC: Sample size for Control Group */
/* ME: Treatment Effect for Experimental Group */
/* MC: Treatment Effect for Control Group */
/* SE: Standard Deviation for Experimental Group */
/* SC: Standard Deviation for Control Group */
Like
data in;
input ne nc me mc se sc;
datalines;
103 100 1.44 1.43 0.65 0.59
;
Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.