Documentation Example 3 for PROC SURVEYFREQ
/****************************************************************/
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: SURFEX3 */
/* TITLE: Documentation Example 3 for PROC SURVEYFREQ */
/* PRODUCT: STAT */
/* SYSTEM: ALL */
/* KEYS: survey sampling, categorical data analysis, */
/* KEYS: stratification, clustering, unequal weighting, */
/* KEYS: frequency tables, output data sets */
/* PROCS: SURVEYFREQ, PRINT */
/* DATA: */
/* */
/* SUPPORT: sasdlw UPDATE: November 30, 2010 */
/* REF: PROC SURVEYFREQ, Example 3 */
/* MISC: */
/****************************************************************/
/* Generate Data -----------------------------------------------*/
proc format;
value ResponseCode
1 = 'Very Unsatisfied'
2 = 'Unsatisfied'
3 = 'Neutral'
4 = 'Satisfied'
5 = 'Very Satisfied';
run;
proc format;
value UserCode
1 = 'New Customer'
0 = 'Renewal Customer';
run;
proc format;
value SchoolCode
1 = 'Middle School'
2 = 'High School';
run;
proc format;
value DeptCode
0 = 'Faculty'
1 = 'Admin/Guidance';
run;
data SIS_Survey;
format Response ResponseCode.;
format NewUser UserCode.;
format SchoolType SchoolCode.;
format Department DeptCode.;
drop j;
retain seed1 111;
retain seed2 222;
retain seed3 333;
State = 'GA';
NewUser = 1;
do School=1 to 71;
call rantbl( seed1, .45, .55, SchoolType );
Department = 0;
call rannor( seed3, x );
SamplingWeight = 25 + x * 2;
do j=1 to 2;
if ( SchoolType = 1 ) then
call rantbl( seed2, .16, .21, .30, .24, .09, Response);
else
call rantbl( seed2, .18, .23, .30, .22, .07, Response);
output;
end;
output;
Department = 1;
call rannor( seed3, x );
SamplingWeight = 15 + x * 1.5;
do j=1 to 2;
if ( SchoolType = 1 ) then
call rantbl( seed2, .10, .15, .33, .28, .14, Response );
else
call rantbl( seed2, .13, .20, .30, .26, .11, Response);
output;
end;
end;
NewUser = 0;
do School=72 to 134;
call rantbl( seed1, .45, .55, SchoolType );
Department = 0;
call rannor( seed3, x );
SamplingWeight = 25 + x * 2;
do j=1 to 2;
if ( SchoolType = 1 ) then
call rantbl( seed2, .16, .21, .30, .24, .09, Response);
else
call rantbl( seed2, .18, .23, .30, .22, .07, Response);
output;
end;
output;
Department = 1;
call rannor( seed3, x );
SamplingWeight = 15 + x * 1.5;
do j=1 to 2;
if ( SchoolType = 1 ) then
call rantbl( seed2, .10, .15, .33, .28, .14, Response );
else
call rantbl( seed2, .13, .20, .30, .26, .11, Response);
output;
end;
end;
State = 'NC';
NewUser = 1;
do School = 135 to 218;
call rantbl( seed1, .45, .55, SchoolType );
Department = 0;
call rannor( seed3, x );
SamplingWeight = 25 + x * 2;
if ( SchoolType = 1 ) then
call rantbl( seed2, .16, .21, .30, .24, .09, Response);
else
call rantbl( seed2, .18, .23, .30, .22, .07, Response);
output;
output;
output;
Department = 1;
call rannor( seed3, x );
SamplingWeight = 15 + x * 1.5;
if ( SchoolType = 1 ) then
call rantbl( seed2, .10, .15, .33, .28, .14, Response );
else
call rantbl( seed2, .13, .20, .30, .26, .11, Response);
output;
output;
end;
NewUser = 0;
do School = 219 to 274;
call rantbl( seed1, .45, .55, SchoolType );
Department = 0;
call rannor( seed3, x );
SamplingWeight = 25 + x * 2;
do j=1 to 2;
if ( SchoolType = 1 ) then
call rantbl( seed2, .16, .21, .30, .24, .09, Response);
else
call rantbl( seed2, .18, .23, .30, .22, .07, Response);
output;
end;
output;
Department = 1;
call rannor( seed3, x );
SamplingWeight = 15 + x * 1.5;
if ( SchoolType = 1 ) then
call rantbl( seed2, .10, .15, .33, .28, .14, Response );
else
call rantbl( seed2, .13, .20, .30, .26, .11, Response);
output;
output;
end;
State = 'SC';
NewUser = 1;
do School = 275 to 328;
call rantbl( seed1, .45, .55, SchoolType );
Department = 0;
call rannor( seed3, x );
SamplingWeight = 25 + x * 2;
do j=1 to 2;
if ( SchoolType = 1 ) then
call rantbl( seed2, .16, .21, .30, .24, .09, Response);
else
call rantbl( seed2, .18, .23, .30, .22, .07, Response);
output;
end;
output;
Department = 1;
call rannor( seed3, x );
SamplingWeight = 15 + x * 1.5;
if ( SchoolType = 1 ) then
call rantbl( seed2, .10, .15, .33, .28, .14, Response );
else
call rantbl( seed2, .13, .20, .30, .26, .11, Response);
output;
output;
end;
NewUser = 0;
do School = 329 to 370;
call rantbl( seed1, .45, .55, SchoolType );
Department = 0;
call rannor( seed3, x );
SamplingWeight = 25 + x * 2;
do j=1 to 2;
if ( SchoolType = 1 ) then
call rantbl( seed2, .16, .21, .30, .24, .09, Response);
else
call rantbl( seed2, .18, .23, .30, .22, .07, Response);
output;
end;
output;
Department = 1;
call rannor( seed3, x );
SamplingWeight = 15 + x * 1.5;
if ( SchoolType = 1 ) then
call rantbl( seed2, .10, .15, .33, .28, .14, Response );
else
call rantbl( seed2, .13, .20, .30, .26, .11, Response);
output;
output;
end;
run;
/* One-Way Frequency Table
Confidence Limits for Percentages
Output Data Set ------------------------*/
proc surveyfreq data=SIS_Survey;
tables Response / cl nowt;
ods output OneWay=ResponseTable;
strata State NewUser;
cluster School;
weight SamplingWeight;
run;
proc print data=ResponseTable;
var Table Response Frequency Percent StdErr LowerCL UpperCL;
run;
/* One-Way Frequency Table
Table Summary Output Data Set ----------------------------*/
proc surveyfreq data=SIS_Survey;
tables Response / cl nowt;
ods output TableSummary=ResponseSummary;
strata State NewUser;
cluster School;
weight SamplingWeight;
run;
proc print data=ResponseSummary split='*';
run;