Skip to main content

DANDA - A macro collection for easier SAS statistical analysis

Objective:  You are running ANOVAs or regressions in SAS, and wish there was a way to avoid writing the dozens of commands needed to conduct the analysis and generate recommended diagnostics and summary of results, not to mention the hundreds of possible options that might be needed to access recommended methods.  A possible solution is to download a copy of danda.sas below, and use this macro collection to run the dozens of commands with one statement.  We will also have future posts covering various uses of danda.sas, giving examples as always.

danda.sas is under continued development, check this page for updates.
Date                       Version            Link
2021/03/15             2.12.030         danda.sas
2021/03/15             2.12                UserManual.pdf  
2012/08/30             2.11                danda211.sas

Example:  You have an RBD split-plot design, so typical SAS code for mixed model ANOVA is
proc mixed data=one;
  class block treat week;
  model height = treat | week / outp=rrr;
  random block  block*treat;
  lsmeans treat | week /pdiff;
run;
proc univariate plot normal data=rrr;
  var resid;
run;
proc means data=rrr;
  class treat week;
  var resid;
run;

and on and on to get other results.  Note that the above code has errors, illustrating how easily researchers may overlook recommended options, such as ddfm=kr to request the popular Kenward-Roger degrees of freedom adjustment, needed for models with multiple error terms such as this example.  Least squares means differences will be printed as a huge table, very difficult to condense into the typical ABC letter grouping indicating which means differ.  And if you have multiple y-variables, you have to repeat all this code for each y-variable, as Proc Mixed only allows one dependent variable.  If you needed to switch to Proc Glimmix, then option names change as well as some of the commands, resulting in more potential coding mistakes.  To be fair, SAS has made improvements recently with ODS graphics incorporated into all procs, potentially making the procs following Proc Mixed unnecessary.

In comparison, the above analysis could be run by
%include 'd:\myfolder\danda.sas';
%mixedaov(one, yvar1 yvar2 aaa--zzz, class=block treat week, fixed=treat|week, random=block block*treat);
That is it!  The user only needs to specify the elements of the model, and list all dependent variables.  The macro implements the standard recommended options and diagnostic checks (eg. normality) automatically.  The %include makes the macros available, with the user specifying where on the computer the danda.sas file is saved.

Comments

Popular posts from this blog

Estimation of the Peak in Quadratic Regression

 Problem:   You are running a standard quadratic (polynomial) regression analysis, and are specifically interested in the X and Y values at the peak.  If you use standard regression software, typically there will be no option that allows the peak to be estimated, with standard errors. Example:   You are studying Growth as a function of Age.  Of particular interest is when maximum Growth occurs, and at what Age. SAS code to generate artificial data, and run the analysis is: data one; do Age=1 to 20; Growth=95 + 2.7*Age - .3*Age*Age + 5*rannor(22); end; proc nlin plots=fit; parms int=2 lin=1 quad=1; model Growth = int + lin*Age + quad*Age*Age; estimate 'Age at peak' -lin/(2*quad); estimate 'Growth at peak' int + lin*(-lin/(2*quad)) + quad*(-lin/(2*quad))*(-lin/(2*quad)); run; The standard quadratic regression model with intercept, linear and quadratic slopes, is coded into Proc NLIN which has the ability to estimate any fun...

Factorial ANOVA with control treatment not integrated into the factorial

Factorial treatment designs are popular, due to advantages of research on multiple treatment factors and how they interact.  But if the design includes a control treatment that is not part of the factorial, problems occur in estimation of least squares means.  A typical example is shown here, with 2 fertilizer and 3 irrigation treatments, giving 6 factorial treatment combinations, plus a control that is defined by a 3rd level of fertilizer, and a 4th level of irrigation: Fert1:Irrig2               Fert2:Irrig1             Fert1:Irrig1 Fert2:Irrig3               Fert1:Irrig3             Fert2:Irrig2           Control Other situations might have the control sharing a level of one of the factors, for example the control might be defined as Fert2:Irrig4.  But this still causes problems with estim...

Can I look at reported standard errors (SE) and decide if means differ?

No guarantees, but roughly if means differ by 3*SE then they are statistically significant.   This is based on the Least Significant Difference, which is 2*sqrt(2)*SE.  Often people use non-overlapping confidence intervals as a decision rule, but this is equivalent to 4*SE, which is a bit conservative. Things that make 3*SE fail: 1)   Actually statistical differences depend on the standard error of difference, SED, not SE.   Anything in the model that makes these differ will make the rule fail, such as covariates and blocking factors. 2)   In general, mixed models with random effects will make the rule fail, because random variance is included in SE, but not in SED.   But this will make 3*SE rule conservative, 3*SED will be even smaller.   If 3*SE suggests a statistical difference, difference most likely exists. Also take a look at Error Bars paper .