Creating a Data Set Containing Confidence Intervals Using PROC UNIVARIATE
Published on 5th September 2010 Estimated Reading Time: 3 minutesWhile you could generate data sets containing means and confidence intervals using PROC SUMMARY
or PROC MEANS
, curiosity and the need to verify a program using a different technique were what drove me to consider using PROC UNIVARIATE
for the task. For the record, the PROC SUMMARY
code is below and the only difference between it and MEANS
is that it doesn't produce output by default, something that's not needed in this case anyway. Quite why there are two SAS procedures doing the same thing is beyond me, though I do wonder if the NOPRINT
option was a later addition than these two procedures. The LCLM
and UCLM
keywords are what triggers the calculation of confidence limits and the ALPHA
option controls the confidence interval used; 0.05 specifies a 95% interval, 0.1 a 90% one and so on.
proc summary data=sashelp.class mean lclm uclm alpha=0.05;
var age;
output out=sasuser.lims mean=mean lclm=lclm uclm=uclm;
run;
Given that I have had PROC UNIVARIATE
producing statistics that MEANS/SUMMARY
didn't in previous versions of SAS (I believe that it was standard deviation that was absent from MEANS/SUMMARY
), I might have expected the calculation and export of confidence limits to a data set to be straightforward. Sadly, it's not a case of simply adding LCLM
and UCLM
keywords in the OUTPUT
statement for the procedure, and ODS OUTPUT
is needed to create the data set instead. An ODS SELECT
statement is needed to pick out the BasicIntervals
output object (UNIVARIATE
creates quite a few, it seems) that is created through specification of the CIBASIC
and ALPHA
(performs the same role as it does for PROC MEANS/SUMMARY
) options on the PROC UNIVARIATE
statement. The reason for the ODS LISTING
and ODS RTF
statements below is to stop output being sent to the output window in a standard SAS session. For some reason, it appears that you need the sending of output to one of the LISTING
, HTML
or RTF
destinations or there will be no data in the data set; I met up with the same behaviour when using ODS PS
, an ODS PRINTER
destination. The data set will contain statistics for mean, standard deviation and variance, so that's why there is a WHERE
clause on the ODS OUTPUT
statement.
ods listing close;
ods rtf body="c:\temp\uni_eg.doc";
ods select BasicIntervals;
ods output BasicIntervals=sasuser.stats(where=(lowcase(parameter)="mean") );
proc univariate cibasic alpha=0.05 data=sashelp.class;
var age;
run;
ods output close;
ods rtf close;
ods listing;