/* For the trial analyses, the program was set to read the raw data file named "datwaba2", and then process this data file within PROC IML -- see the "USE" command near the start of the program. Alternatively, the READ or EDIT statements (PROC IML commands) can also be used to read a data file. */ /* DETECT Data Set A, from www.LevelsOfAnalysis.com variables: TASKCLAR DYAD NEGOT SATIS */ data datwaba2; input TASKCLAR DYAD NEGOT SATIS; cards; 2 1 14 14 2 1 22 28 2 3 13 16 2 3 26 26 2 4 26 22 2 4 16 20 2 6 16 16 2 6 24 22 2 7 23 24 2 7 15 22 1 2 20 23 1 2 13 19 1 5 18 15 1 5 22 23 1 8 21 25 1 8 14 17 1 9 27 24 1 9 14 19 1 10 25 25 1 10 15 17 2 31 14 14 2 31 22 28 2 33 13 16 2 33 26 26 2 34 26 22 2 34 16 20 2 36 16 16 2 36 24 22 2 37 23 24 2 37 15 22 1 32 20 23 1 32 13 19 1 35 18 15 1 35 22 23 1 38 21 25 1 38 14 17 1 39 27 24 1 39 14 19 1 40 25 25 1 40 15 17 ; run; proc means data=datwaba2; var TASKCLAR DYAD NEGOT SATIS; run; options nocenter nodate nonumber linesize=100 pagesize=500; title; proc iml; reset noname; /* WABA - Multiple Relationship Analysis */ /* Sources (which must be consulted for interpretation of the results) Dansereau, Alutto, & Yammarino (1984). Theory Testing in Organizational Behavior. Prentice-Hall; Yammarino (1998). Multivariate aspects of the varient/WABA approach. Leadership Quarterly, 9, 203-227; www.LevelsOfAnalysis.com */ /* This program conducts separate WABA analyses for each value of a specified "Condition" variable. The program then conducts Multiple Relationship Analysis comparisons of the WABA coefficients for the different Condition values. */ /* Prepare a raw data matrix for analysis, where rows = cases, & columns = variables. Each row contains the data from a single individual. The values/variables in each row are separated from each other by one or more spaces. Cases with missing values are not permitted in the data file. */ /* The first value in each row (i.e., the first column of values in the data file) must be the Condition number. Condition numbers must be integers; the lowest Condition number cannot be less than one; it is also best for there to be no missing values between the lowest and highest Condition numbers; e.g., if the lowest value is 1 and the highest value is 5, then there should also be Condition values of 2, 3, and 4 somewhere in the data file. Gaps in the integers may cause problems. */ /* The second value in each row (i.e., the second column of values in the data file) must be the individual's group number/code; The program sorts individuals into groups on the basis of these numbers/codes. */ /* Variable scores appear in subsequent columns. */ /* Use the following name for the raw data matrix: "datacond" */ /* The following command causes the program to process the SAS data file that was created above. */ use datwaba2; read all var _num_ into datacond; /* Data can also be entered into the program directly, as in the following example using the "datacond = {" command. */ /* DETECT Data Set A, from www.LevelsOfAnalysis.com variables: TASKCLAR DYAD NEGOT SATIS */ datacond = { 2 1 14 14, 2 1 22 28, 2 3 13 16, 2 3 26 26, 2 4 26 22, 2 4 16 20, 2 6 16 16, 2 6 24 22, 2 7 23 24, 2 7 15 22, 1 2 20 23, 1 2 13 19, 1 5 18 15, 1 5 22 23, 1 8 21 25, 1 8 14 17, 1 9 27 24, 1 9 14 19, 1 10 25 25, 1 10 15 17, 2 31 14 14, 2 31 22 28, 2 33 13 16, 2 33 26 26, 2 34 26 22, 2 34 16 20, 2 36 16 16, 2 36 24 22, 2 37 23 24, 2 37 15 22, 1 32 20 23, 1 32 13 19, 1 35 18 15, 1 35 22 23, 1 38 21 25, 1 38 14 17, 1 39 27 24, 1 39 14 19, 1 40 25 25, 1 40 15 17 }; /*Done. The program will can now analyze the data. */ /* collumn sums module */ start csum(matname); csums =j(1,ncol(matname)); do cols = 1 to ncol(matname); dumc = matname[,cols]; csums[1,cols]=sum(dumc); end; return(csums); finish; /* correlation matrix module */ start corrcoef(matname); cases = nrow(matname); nm1 = cases - 1; zscores = j(cases, ncol(matname), -999); do loopc = 1 to ncol(matname); mean = sum(matname[,loopc]) / cases; sd = sqrt ( ssq((matname[,loopc]- mean)) / nm1 ); zscores[,loopc] = (matname[,loopc] - mean) / sd; end; rdata = (1 / nm1 ) * ( t(zscores) * zscores ); return(rdata); finish; mincond = min(datacond[,1]); maxcond = max(datacond[,1]); rbwdf = j(maxcond, 5, -9999); /* grand loop, for doing one condition at a time */ do grand = mincond to maxcond; print,"Results for Condition #",grand; data = j(1,3,-9999); do luper = 1 to nrow(datacond); if datacond[luper,1] = grand then do; data = ( data // datacond[luper,2:4] ); end; end; data = data[2:nrow(data),]; /* regular WABA goes here */ nss = nrow(data); totmn = csum(data[,2:ncol(data)]) / nss; totdev = j( nss, ncol(data)-1, -9999); withdev = j( nss, ncol(data)-1, -9999); betwdev = j( nss, ncol(data)-1, -9999); grpns = j( 1, 1, -9999); first = 1; ngrps = 0; do luper1 = 2 to nss; if data[(luper1),1] ^= data[(luper1-1),1] | luper1 = nss then do; if luper1 ^= nss then do; last = luper1 - 1; end; if luper1 = nss then do; last = luper1; end; ngrps = ngrps + 1; tempdat = data[first:last,2:ncol(data)]; cmean = csum(tempdat) / nrow(tempdat); grpns = ( grpns // (last - first) + 1 ); do luper2 = first to last; totdev[luper2,] = data[luper2,2:ncol(data)] - totmn; withdev[luper2,] = data[luper2,2:ncol(data)] - cmean; betwdev[luper2,] = cmean - totmn; end; first = luper1; end; end; cormat = corrcoef( ( totdev || betwdev || withdev ) ); nvars = nrow(cormat) / 3; /* mean & sd */ tempdat = data[,2:ncol(data)]; sd = j(1, ncol(tempdat), -9999); mean = csum(tempdat) / nss; do aa = 1 to ncol(tempdat); sd[1,aa] = sqrt(ssq((tempdat[,aa]- mean[1,aa]))/(nss-1)); end; print,"WABA"; print "Number of Individual Cases in the Data File:",nss; print "Number of Groups in the Data File:",ngrps; print "Number of Variables for the Analyses:",nvars; print "All Significance Tests Are Two-Tailed"; print,"Variable Means and Standard Deviations"; labels = ("Variable"||"Mean"||"Std Dev"); print ( t(1:nvars) || t(mean) || t(sd) ) [colname=labels format=9.4]; /* Within- and Between-Groups Analysis of Variance */ etabetw = vecdiag( cormat[ (nvars+1):(nvars*2) , 1:nvars]); etawith = vecdiag( cormat[ (nvars*2+1):(nvars*3),1:nvars]); etasq = ( etabetw || etawith )##2; /* E tests */ etests = etabetw / etawith; /* F tests */ ftrad = (etests##2) * ( (nss - ngrps) / (ngrps - 1) ); fcrctd = 1 / ftrad; /* dfs for the F values (Dansereau et al 1984, p. 125, 128, 172) */ dfnumt = j(nvars,1,(ngrps - 1)); dfdemt = j(nvars,1,(nss - ngrps)); dfnumc = j(nvars,1,(nss - ngrps)); dfdemc = j(nvars,1,(ngrps - 1)); /* sig levels for F */ pftrad = 1 - probf(ftrad,dfnumt[1,1],dfdemt[1,1]); pfcrctd = 1 - probf(fcrctd,dfnumc[1,1],dfdemc[1,1]); /* for displaying only the appropriate F results */ fetas = ( t(1:nvars) || ftrad || dfnumt || dfdemt || pftrad); do lupev = 1 to nvars; if etawith[lupev,1] > etabetw[lupev,1] then do; fetas[lupev,2] = fcrctd[lupev,1]; fetas[lupev,3] = dfnumc[lupev,1]; fetas[lupev,4] = dfdemc[lupev,1]; fetas[lupev,5] = pfcrctd[lupev,1]; end; end; print "Within-Groups and Between-Groups Etas and Eta-squared values:"; labels = ("Variable"||"Eta-Betw"||"Eta-With"||"Eta-Bsq"||"Eta-Wsq"); print ( t(1:nvars) || etabetw || etawith || etasq ) [colname=labels format=9.4]; print "The above Eta-Betw and Eta-With values for each variable are"; print "tested relative to one another with E tests of practical"; print "significance and F tests of statistical significance:"; labels = ("Variable"||"E-test"||"F"||"df num."||"df dem."||"p"); print ( fetas[,1] || etests || fetas[, 2:5] ) [colname=labels format=9.4]; print' E-test practical significance criteria & inductions:'; print' E >= 1.30323 = Wholes - 15; E >= 1.73205 = Wholes - 30;'; print' E <= 0.76733 = Parts - 15; E <= 0.57735 = Parts - 30;'; /* Other indices of within-group agreement: Intraclass Correlations */ grpns = grpns[ 2:(nrow(grpns)),]; ssb = csum(betwdev##2); dfb = ngrps - 1; msb = ssb / dfb; ssw = csum(withdev##2); dfw = csum(grpns - 1); msw = ssw / dfw; icc1 = (msb - msw) / (msb+( (csum(grpns)/nrow(grpns)) -1)*msw); icc2 = (msb - msw) / msb; print "Other Indices of Within-Group Agreement: Intraclass Correlations"; labels = ("Variable"||"ICC(1)"||"ICC(2)"); print ( t(1:nvars) || t(icc1) || t(icc2) ) [colname=labels format=9.4]; print" Sources:"; print" Bliese (2000), in Klein et al, Multilevel theory, research, and methods in organizations."; print" Shrout & Fleiss, 1979, Psychological Bulletin, 86, 420-428."; print" McGraw & Wong, 1996, Psychological Methods, 1, 30-46."; /* Within- and Between-Groups Analysis of Covariance Analyses */ rbetw = cormat[ (nvars+1):(nvars*2),(nvars+1):(nvars*2)]; rwith = cormat[ (nvars*2+1):(nvars*3),(nvars*2+1):(nvars*3)]; rbw = j(1, 4, -9999); do luper = 1 to nvars-1; do lupec = luper+1 to nvars; rbw = (rbw // (luper||lupec||rbetw[luper,lupec]||rwith[luper,lupec])); end; end; rbw = rbw[2:nrow(rbw),]; /* A test */ atests = arsin(sqrt(1-(rbw[,4]##2)))-arsin(sqrt(1-(rbw[,3]##2))); /* Z test */ zbw = j(nrow(rbw), 1, -9999); if ngrps > 3 then do; do luper = 1 to nrow(rbw); if abs(rbw[luper,3]) < 1 & abs(rbw[luper,4]) < 1 then do; zbxy =abs(0.5*((log(1+abs(rbw[luper,3])))-(log(1-abs(rbw[luper,3]))))); zwxy =abs(0.5*((log(1+abs(rbw[luper,4])))-(log(1-abs(rbw[luper,4]))))); zbw[luper,1] = (zbxy - zwxy) / sqrt( (1/(nss-ngrps-2))+(1/(ngrps-3))); end; end; end; pzbw = 1 - probnorm(abs(zbw)) ; /* R test of practical sigificance */ rbig = j(nrow(rbw), 2, -9999); do luper = 1 to nrow(rbw); do lupec = 3 to 4; if abs(rbw[luper,lupec]) < 1 then do; /* rbig formula from Dansereau 1984 p 131 */ rbig[luper,lupec-2] = abs( rbw[luper,lupec] / sqrt ( 1 - rbw[luper,lupec]##2 ) ); /* compute rbig formula from Yamarino & Markham, 1992 p 170 = slightly diff */ /* compute rbig[luper,lupec-2] = rbw[luper,lupec] / ( ( (1 - (rbw[luper,lupec]##2) )##.6667) ); */ end; end; end; /* t-tests of statistical significance (Yamarino & Markham, 1992 p 170) */ tb = rbig[,1] * sqrt(ngrps-2); dftb = ngrps - 2; tw = rbig[,2] * sqrt(nss-ngrps-1); dftw = nss - ngrps - 1; ptb = j( nrow(tb), 1, -9999 ); ptw = j( nrow(tw), 1, -9999 ); do luper = 1 to nrow(tb); ptb[luper,1] = (1 - probt(abs(tb[luper,1]),dftb)) * 2; ptw[luper,1] = (1 - probt(abs(tw[luper,1]),dftw)) * 2; end; print,"Within-Groups and Between-Groups Correlations:"; labels = ("Var.#"||"Var.#"||"r-Betw"||"r-With"||"A-test"||"Z-test"||"p"); print (rbw || atests || zbw || pzbw) [colname=labels format=9.4]; print " A-tests represent practical, and Z-tests represent statistical, assessments of"; print " the differences between the within-groups and between-groups correlations."; print " A-test practical significance criteria & inductions:"; print " A >= 0.2618 = Wholes - 15; A >= 0.5236 = Wholes - 30;"; print " A <= -0.2618 = Parts - 15; A <= -0.5236 = Parts - 30;"; print " -9999 indicates the Z test could not be computed."; print,"Between-Groups Correlation Tests of Practical (R) and Statistical (t) Significance"; labels = ("Var.#"||"Var.#"||"R"||"t-test"||"p"); print ( rbw[,1:2] || rbig[,1] || tb || ptb ) [colname=labels format=9.4]; print" R-test practical significance criteria & inductions:"; print" R >= 0.26795 = S - 15; R >= 0.57735 = S - 30;"; print " Degrees of Freedom for t-tests:" (1 || dftb); print" A value of -9999 indicates the t-test could not be computed."; print,"Within-Groups Correlation Tests of Practical (R) and Statistical (t) Significance"; labels = ("Var.#"||"Var.#"||"R"||"t-test"||"p"); print ( rbw[,1:2] || rbig[,2] || tw || ptw ) [colname=labels format=9.4]; print " R-test practical significance criteria & inductions:"; print " R >= 0.26795 = S - 15; R >= 0.57735 = S - 30;"; print " Degrees of Freedom for t-tests:",( 1 || dftw); print " A value of -9999 indicates the t-test could not be computed."; /* Within- and Between-Groups Components and Raw (Total) Correlations */ compons = rbw; do luper = 1 to nrow(rbw); compons[luper,3] = etabetw[rbw[luper,1],1] * etabetw[rbw[luper,2],1] * rbw[luper,3]; compons[luper,4] = etawith[rbw[luper,1],1] * etawith[rbw[luper,2],1] * rbw[luper,4]; end; compons = ( compons || (compons[,3] + compons[,4]) ); /* R test of practical sigificance of the total correlations */ rbig2 = j(nrow(compons), 1, -9999); do luper = 1 to nrow(compons); if abs(compons[luper,5]) < 1 then do; /* rbig formula from Dansereau 1984 p 131 */ rbig2[luper,1] = abs( compons[luper,5] / sqrt ( 1 - compons[luper,5]##2 ) ); /* rbig formula from Yamarino & Markham, 1992 p 170 = slightly diff */ /* compute rbig2(luper,lupec-2) = rbw[luper,lupec] / ( ( (1 - (rbw[luper,lupec]##2) )##.6667) ); */ end; end; /* t-tests for the total correlations Dansereau et al 1984 p 119 */ ttot = rbig2 * sqrt(nss-2); dftot = nss - 2; ptot = j( nrow(ttot), 1, -9999 ); do luper = 1 to nrow(ttot); ptot[luper,1] = (1 - probt(abs(ttot[luper,1]),dftot)) * 2; end; /* A test of the between vs within components difference */ aradians = arsin(sqrt(1-(compons[,4]##2))) - arsin(sqrt(1-(compons[,3]##2))); /* Z test of the between vs within components difference */ zbwc = j(nrow(compons), 1, -9999); if ngrps > 3 then do; do luper = 1 to nrow(compons); if abs(compons[luper,3]) < 1 & abs(compons[luper,4]) < 1 then do; zbxyc =abs( 0.5* ((log(1+abs(compons[luper,3]))) - (log(1-abs(compons[luper,3])))) ); zwxyc =abs( 0.5* ((log(1+abs(compons[luper,4]))) - (log(1-abs(compons[luper,4])))) ); zbwc[luper,1] = (zbxyc - zwxyc) / sqrt( (1/(nss-ngrps-2))+(1/(ngrps-3)) ); end; end; end; pzbwc = (1 - probnorm(abs(zbwc))) * 2; print,"Within-Groups and Between-Groups WABA Components and Raw/Total Correlation(s):"; labels = ("Var.#"||"Var.#"||"Betw"||"With"||"Raw/Tot."); print compons [colname=labels format=9.4]; print "Practical (R) and Statistical (t) Significance of the Raw/Total correlations:"; labels = ("Var.#"||"Var.#"||"R"||"t-test"||"p"); print ( compons[,1:2] || rbig2 || ttot || ptot ) [colname=labels format=9.4]; print " R-test practical significance criteria & inductions:"; print " R >= 0.26795 = S - 15; R >= 0.57735 = S - 30;"; print " Degrees of Freedom for t-tests:",(1 || dftot); print " A value of -9999 indicates the t-test could not be computed."; print "The Within-Groups and Between-Groups WABA Components are tested relative to"; print "one another with A tests of practical Z tests of statistical significance."; labels = ("Var.#"||"Var.#"||"A-test"||"Z-test"||"p"); print (compons[,1:2] || aradians || zbwc || pzbwc) [colname=labels format=9.4]; print" A-test practical significance criteria & inductions:"; print" A >= 0.2618 = Wholes - 15; A >= 0.5236 = Wholes - 30;"; print" A <= -0.2618 = Parts - 15; A <= -0.5236 = Parts - 30;"; print" -9999 indicates the Z test could not be computed."; rbwdf[grand,] = ( rbw[1,3:4] || dftb || dftw || grand ); end; /* Multiple Relationship Analysis */ print,,"Multiple Relationship Analysis"; print "Sources:"; print "Dansereau, Alutto, & Yammarino (1984). Theory Testing in Organizational Behavior. Prentice-Hall."; print "Yammarino (1998). Multivariate aspects of the varient/WABA approach. Leadership Quarterly, 9, 203-227."; print "www.LevelsOfAnalysis.com"; /* loops for comparing each condition with every other condition */ do luper1 = 1 to (nrow(rbwdf)-1); do luper2 = (luper1+1) to nrow(rbwdf); dumm = ( rbwdf[luper1,] // rbwdf[luper2,] ); print "Comparisons of Coefficients From The Following Two Conditions"; print ( dumm[1,5] || dumm[2,5] ); /* comparison of the two Between correlations */ labels = ("Cond.#"||"r-Betw."||"Cond.#"||"r-Betw."); print,,(dumm[1,5]||dumm[1,1]||dumm[2,5]||dumm[2,1]) [colname=labels format=9.4]; if abs(dumm[1,1]) < 1 & abs(dumm[2,1]) < 1 then do; /* "A" test of the difference between the correlations; Dansereau et al, 1984, p 142 */ atest = arsin(abs(sqrt(1-(dumm[1,1]*dumm[1,1])))) - arsin(abs(sqrt(1-(dumm[2,1]*dumm[2,1])))); adegs = atest * 57.29578; /* Z test of the difference between the correlations; Dansereau et al, 1984, p 142 */ z1 =abs(0.5* ((log(1+abs(dumm[1,1]))) - (log(1-abs(dumm[1,1]))))); z2 =abs(0.5* ((log(1+abs(dumm[2,1]))) - (log(1-abs(dumm[2,1]))))); zbb = (z1 - z2) / sqrt( (1/(dumm[1,3]-1))+(1/(dumm[2,3]-1)) ); pzbb = (1 - probnorm(abs(zbb))) * 2 ; print " A test (in radians & degrees) & z-test:"; labels = ( "A-rads"||"A-degs"||"z"||"p"); print ( abs(atest) || abs(adegs) || zbb || pzbb ) [colname=labels format=9.4]; end; if (abs(dumm[1,1]) = 1 | abs(dumm[2,1]) = 1) then; print"A and Z tests cannot be computed"; /* comparison of the two Within correlations */ labels = ("Cond.#"||"r-With."||"Cond.#"||"r-With."); print,,(dumm[1,5]||dumm[1,2]||dumm[2,5]||dumm[2,2]) [colname=labels format=9.4]; if abs(dumm[1,2]) < 1 & abs(dumm[2,2]) < 1 then do; /* "A" test of the difference between the correlations; Dansereau et al, 1984, p 142 */ atest = arsin(abs(sqrt(1-(dumm[1,2]*dumm[1,2])))) - arsin(abs(sqrt(1-(dumm[2,2]*dumm[2,2])))); adegs = atest * 57.29578; /* Z test of the difference between the correlations; Dansereau et al, 1984, p 142 */ z1 =abs(0.5* ((log(1+abs(dumm[1,2]))) - (log(1-abs(dumm[1,2]))))); z2 =abs(0.5* ((log(1+abs(dumm[2,2]))) - (log(1-abs(dumm[2,2]))))); zww = (z1 - z2) / sqrt( (1/(dumm[1,4]-1))+(1/(dumm[2,4]-1)) ); pzww = (1 - probnorm(abs(zww))) * 2 ; print " A test (in radians & degrees) & z-test:"; labels = ( "A-rads"||"A-degs"||"z"||"p"); print ( abs(atest) || abs(adegs) || zww || pzww ) [colname=labels format=9.4]; end; if (abs(dumm[1,2]) = 1 | abs(dumm[2,2]) = 1) then; print "A and Z tests cannot be computed"; /* comparison of the Between & Within correlations */ labels = ("Cond.#"||"r-Betw."||"Cond.#"||"r-With."); print,,(dumm[1,5]||dumm[1,1]||dumm[2,5]||dumm[2,2]) [colname=labels format=9.4]; if abs(dumm[1,1]) < 1 & abs(dumm[2,2]) < 1 then do; /* "A" test of the difference between the correlations; Dansereau et al, 1984, p 142 */ atest = arsin(abs(sqrt(1-(dumm[1,1]*dumm[1,1])))) - arsin(abs(sqrt(1-(dumm[2,2]*dumm[2,2])))); adegs = atest * 57.29578; /* Z test of the difference between the correlations; Dansereau et al, 1984, p 142 */ z1 =abs(0.5* ((log(1+abs(dumm[1,1]))) - (log(1-abs(dumm[1,1]))))); z2 =abs(0.5* ((log(1+abs(dumm[2,2]))) - (log(1-abs(dumm[2,2]))))); zbw = (z1 - z2) / sqrt( (1/(dumm[1,3]-1))+(1/(dumm[2,4]-1)) ); pzbw = (1 - probnorm(abs(zbw))) * 2 ; print " A test (in radians & degrees) & z-test:"; labels = ( "A-rads"||"A-degs"||"z"||"p"); print ( abs(atest) || abs(adegs) || zbw || pzbw ) [colname=labels format=9.4]; end; if (abs(dumm[1,1]) = 1 | abs(dumm[2,2]) = 1) then; print "A and Z tests cannot be computed"; /* comparison of the other Between & Within correlations */ labels = ("Cond.#"||"r-Betw."||"Cond.#"||"r-With."); print,,(dumm[2,5]||dumm[2,1]||dumm[1,5]||dumm[1,2]) [colname=labels format=9.4]; if abs(dumm[2,1]) < 1 & abs(dumm[1,2]) < 1 then do; /* "A" test of the difference between the correlations; Dansereau et al, 1984, p 142 */ atest = arsin(abs(sqrt(1-(dumm[2,1]*dumm[2,1])))) - arsin(abs(sqrt(1-(dumm[1,2]*dumm[1,2])))); adegs = atest * 57.29578; /* Z test of the difference between the correlations; Dansereau et al, 1984, p 142 */ z1 =abs(0.5* ((log(1+abs(dumm[2,1]))) - (log(1-abs(dumm[2,1]))))); z2 =abs(0.5* ((log(1+abs(dumm[1,2]))) - (log(1-abs(dumm[1,2]))))); zbw = (z1 - z2) / sqrt( (1/(dumm[2,3]-1))+(1/(dumm[1,4]-1)) ); pzbw = (1 - probnorm(abs(zbw))) * 2 ; print " A test (in radians & degrees) & z-test:"; labels = ( "A-rads"||"A-degs"||"z"||"p"); print ( abs(atest) || abs(adegs) || zbw || pzbw ) [colname=labels format=9.4]; end; if (abs(dumm[2,1]) = 1 | abs(dumm[1,2]) = 1) then; print "A and Z tests cannot be computed"; end; end; quit;