0% found this document useful (0 votes)
31 views6 pages

Grip Feb18-04.sas

This macro runs a two-way analysis of variance (ANOVA) and calculates reliability statistics to assess inter-rater reliability. It takes in data, specifies the target and repeated variables, dependent variable, and provides titles. It runs PROC GLM and sorts the output to extract mean squares and degrees of freedom. It then calculates various reliability coefficients and outputs the results.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views6 pages

Grip Feb18-04.sas

This macro runs a two-way analysis of variance (ANOVA) and calculates reliability statistics to assess inter-rater reliability. It takes in data, specifies the target and repeated variables, dependent variable, and provides titles. It runs PROC GLM and sorts the output to extract mean squares and degrees of freedom. It then calculates various reliability coefficients and outputs the results.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
You are on page 1/ 6

%MACRO twoway;

*************************************************************************
***;
* Hays, R. D. Wang, E., & Sonksen, M. (1995, September).
* General Reliability and Intraclass Correlation Program (GRIP).
* Proceedings of the 3rd Annual Western Users of SAS Conference,
* 220-223.
*************************************************************************
***;
* Modified by Sally Carson to add REL70;
* Modified by Karen Spritzer to add REL80, REL90, and REL95 and to run
* under SAS 8.0;
*
* Modified by Karen Spritzer on 2/18/04 to put "upcase" on both sides of
the
* comparison between "source" and "target" in the 2-way portion of code;
* SAS 8 is case-sensitive with respect to variable names and that was
mixing
* up the procedure;
*************************************************************************
***;
proc glm data=&indata outstat=stats noprint;
class &targetv &repeatv;
model &dv = &targetv &repeatv ;
run;

proc sort data=stats;


by _name_ _SOURCE_;
run;

data allrel;
retain bdf bms jdf edf wms jms ems k;
set stats;
by _name_;
if _type_='SS1' then delete;
if _source_='ERROR' then do;
ems=ss/df;
edf=df;
end;
if upcase(_source_)="%upcase(&targetv)" then do; * modified by KS on 2-
18-04;
bms=ss/df;
bdf=df;
end;
if upcase(_source_)="%upcase(&repeatv)" then do; * modified by KS on
2-18-04 ;
jms=ss/df;
jdf=df;
k=df+1;
end;
if last._name_ then do;
wms=((ems*edf)+(jms*jdf))/(edf+jdf);
n=bdf+1;
m=(n*(k-1))/(n*(k-1)-2);
theta=(bms-(m*wms))/(k*m*wms);
rii=theta/(1+theta);
rtt=(k*theta)/(1+(k*theta));

fixed=(bms-ems)/(bms+((k-1)*ems));
fixedk=(bms-ems)/bms;
biased=(bms-wms)/(bms+(k-1)*wms);
random=(bms-ems)/((bms)+((k-1)*ems)+((k*(jms-ems))/n));
rk=(bms-ems);
randk=rk/(bms+((jms-ems)/n));
k=(bms-wms)/bms;
output;
end;
run;

data _null_;
file print header=hea1 ps=64 notitles;
set allrel;
kkm=jdf+edf;
kk3=edf+bdf+jdf;
*+++++++++1+++++++++2+++++++++3+++++++++4+++++++++5+++++++++6+++++++++7++
+++++++8+++++++++9++++++++10;
put
@20 'Degrees of mean Label for'/
@5 'Source freedom' @35 'square' @45 'mean Square'/
@5 '----------------------------------------------------------';

put @5 'Ratees (N-1)' @24 bdf 3. @34 bms 7.2 @49 'BMS'/
@5 'Within' @24 kkm 3. @34 wms 7.2 @49 'WMS'/
@7 'Raters (K-1)' @25 jdf 3. @34 jms 7.2 @49 'JMS'/
@7 'Raters x Ratees ' @25 edf 3. @34 ems 7.2 @49 'EMS'/
@5 '----------------------------------------------------------'/
@5 'Total' @24 kk3 3. /;
return;

hea1:
do;
put @5 "&t1 "/;
end;
return;
run;

data _null_;
file print header=hea1 ps=64 notitles;
set allrel;
*+++++++++1+++++++++2+++++++++3+++++++++4+++++++++5+++++++++6+++++++++7++
+++++++8+++++++++9++++++++10;
put
@5 'Model Reliability Intraclass Correlation'/
@5 '---------------------------------------------------------------';
put @5 'One way'/
@7 'Biased' @24 k 5.3 @53 biased 5.3 /
@7 'Unbiased' @24 rtt 5.3 @53 rii 5.3 //
@5 'Two-way'/
@7 'Fixed effects' @24 fixedk 5.3 @53 fixed 5.3 /
@7 'Random effects' @24 randk 5.3 @53 random 5.3 /
@5 '---------------------------------------------------------------'/;
return;

hea1:
do;
put @5 " &t2 "//;
end;
return;
run;
%MEND twoway;
**********************************************;

**********************************************;
%MACRO oneway;
**********************************************;
title1 "&t1";
title2 "&t2";

proc anova data=&indata outstat=est1 noprint;


class &targetv;
model &dv= &targetv;
run;

data est;
set est1;
retain;
if _type_='ERROR' then wms=ss/df;
if _type_='ERROR' then n=df;
if _type_='ERROR' then errdf=df;
if _type_='ANOVA' then bms=ss/df;
if _type_='ANOVA' then betdf=df;
if _type_='ANOVA' then nrated=df+1;
if _type_='ANOVA' then nn=n+df+1;
if _type_='ANOVA' then k=nn/nrated;
OUTPUT;
data est;
set est;
m=(n*(k-1))/(n*(k-1)-2);
theta=(bms-(m*wms))/(k*m*wms);
rii=theta/(1+theta);
rtt=(k*theta)/(1+(k*theta));
frtt=(bms-wms)/bms;
frii=frtt/(k * (1 + (frtt * (1/k - 1))));

/* added by sally carson ----> */


*bn4rel70=(frtt-(frii*frtt))/(frii*(1-frtt));
bn4rel70=(.70 -(frii*.70 ))/(frii*(1-.70 ));
*un4rel70=(rtt-(rii*rtt))/(rii*(1-rtt));
un4rel70=(.70-(rii*.70))/(rii*(1-.70));

/* added by karen spritzer ----> */


bn4rel80=(.80 -(frii*.80 ))/(frii*(1-.80 ));
un4rel80=(.80-(rii*.80))/(rii*(1-.80));

bn4rel90=(.90 -(frii*.90 ))/(frii*(1-.90 ));


un4rel90=(.90-(rii*.90))/(rii*(1-.90));

bn4rel95=(.95 -(frii*.95 ))/(frii*(1-.95 ));


un4rel95=(.95-(rii*.95))/(rii*(1-.95));

OUTPUT;
run;
DATA EST;
SET EST;
if k ne .;
RUN;

data _null_;
file print ps=64 /*notitles*/;
set est;
k2=k-1;
n2=n-1;
k3=n2+n;
kk=betdf+errdf;
*+++++++++1+++++++++2+++++++++3+++++++++4+++++++++5+++++++++6+++++++++7++
+++++++8+++++++++9++++++++10;
put ///// @5 'GRIP' //
@20 'Degrees of mean Label for'/
@5 'Source freedom' @35 'square' @45 'mean Square'/
@5 '----------------------------------------------------------';

put @5 'Between ' @24 betdf 5. @34 bms 7.2 @49 'BMS'/
@5 'Within' @24 errdf 5. @34 wms 7.2 @49 'WMS'/
@5 '----------------------------------------------------------'/
@5 'Total' @24 kk 5. /;
PUT /////;
*return;
/*
data _null_;
file print ps=64 /*notitles**;
set est; */
*+++++++++1+++++++++2+++++++++3+++++++++4+++++++++5+++++++++6+++++++++7++
+++++++8+++++++++9++++++++10;
put
@5 'Model Reliability ICC N4rel.70 N4rel.80 N4rel.90
N4rel.95'/
@5
'------------------------------------------------------------------------
-------------------------';
put @5 'One way'/
@7 'Biased' @24 frtt 5.3 @33 frii 5.3 @43 bN4rel70 7.2
@53 bN4rel80 7.2 @63 bN4rel90 7.2 @76 bN4rel95 7.2/
@7 'Unbiased' @24 rtt 5.3 @33 rii 5.3 @43 uN4rel70 7.2
@53 uN4rel80 7.2 @63 bN4rel90 7.2 @76 bN4rel95 7.2//
@5
'------------------------------------------------------------------------
-------------------------'/;
return;
RUN;
%MEND oneway;
**********************************************;

%MACRO grip(indata=,targetv=,repeatv=,dv=,nrepeatv=,type=,t1=,t2=);
%IF %EVAL(&type) %then %DO;
%twoway;
%end;
%ELSE
%DO;
%oneway;
%end;
%MEND grip;

******************************************************;
** Program and macro call starts here:
******************************************************;

data all;
input plant $ 1-2 expcon rater height0 height1;
cards;
A1 1 1 120 121
A1 1 2 118 120
A2 2 1 84 85
A2 2 2 96 88
B1 2 1 107 108
B1 2 2 105 104
B2 1 1 94 100
B2 1 2 97 104
C1 2 1 85 88
C1 2 2 91 96
C2 1 1 79 86
C2 1 2 78 92
D1 1 1 70 76
D1 1 2 72 80
D2 2 1 54 56
D2 2 2 56 60
E1 1 1 85 101
E1 1 2 97 108
E2 2 1 90 84
E2 2 2 92 96
;
run;
******************************************************;
%GRIP(indata=all,targetv=plant,repeatv=rater,dv=height0,
type=1,t1=test of GRIP macro,t2=);
******************************************************;

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy