Getting Started Examples for PROC SURVEYLOGISTIC


/****************************************************************/
/*          S A S   S A M P L E   L I B R A R Y                 */
/*                                                              */
/*    NAME: SVLGS                                               */
/*   TITLE: Getting Started Examples for PROC SURVEYLOGISTIC    */
/* PRODUCT: STAT                                                */
/*  SYSTEM: ALL                                                 */
/*    KEYS: logistic regression, survey sampling                */
/*    KEYS: link functions, stratification, clustering          */
/*    KEYS: unequal weighting, categorical data analysis        */
/*   PROCS: SURVEYLOGISTIC                                      */
/*    DATA:                                                     */
/*                                                              */
/* SUPPORT: sasaba                                              */
/*     REF: PROC SURVEYLOGISTIC, Getting Started                */
/*                                                              */
/*    MISC:                                                     */
/*                                                              */
/****************************************************************/

/* Example in the Getting Started section */

proc format;
   value Coding
      1='Extremely Unsatisfied'
      2='Unsatisfied'
      3='Neutral'
      4='Satisfied'
      5='Extremely Satisfied';
run;

data Customer1;
   input CustomerID State$ Type$ Usage Rating;
   format Rating coding.;
   datalines;
416874322 AL New 839   1
288139763 GA Old 224   2
339008654 GA Old 2451  3
118980542 GA New 349   4
421670342 FL New 562   5
623189201 SC New 68    2
324550324 FL Old 137   3
832902397 AL Old 1563  4
586450178 GA New 615   1
801245317 SC New 728   5
;

data Customer2;
   drop n; retain seed 321;
   format Rating coding.;
   state = 'GA';
   Type = 'New';
   do n=1 to 3486;
      CustomerID = floor(1e9 * ranuni(123));
      Usage = exp(5+1.35*rannor(456));
      call rantbl(seed, .11 ,.16 ,.31 ,.30, Rating);
      output;
   end;
   Type = 'Old';
   do n= 1 to 1938;
      CustomerID = floor(1e9 * ranuni(123));
      Usage = exp(5.2+1.4*rannor(456));
      call rantbl(seed, .15 ,.20 ,.25 ,.18, Rating);
      output;
   end;
   state = 'AL';
   Type = 'New';
   do n=1 to 1237;
      CustomerID = floor(1e9 * ranuni(123));
      Usage = exp(5+1.35*rannor(456));
      call rantbl(seed, .09 ,.16 ,.25 ,.3, Rating);
      output;
   end;
   Type = 'Old';
   do n=1 to 705;
      CustomerID = floor(1e9 * ranuni(123));
      Usage = exp(5.2+1.4*rannor(456));
      call rantbl(seed, .11 ,.16 ,.34 ,.37, Rating);
      output;
   end;
   state = 'FL';
   Type = 'New';
   do n=1 to 2169;
      CustomerID = floor(1e9 * ranuni(123));
      Usage = exp(5+1.35*rannor(456));
      call rantbl(seed, .17 ,.23 ,.25 ,.2, Rating);
      output;
   end;
   Type = 'Old';
   do n=1 to 1369;
      CustomerID = floor( 1e9 * ranuni(6) );
      Usage = exp(5.2+1.4*rannor(1));
      call rantbl(seed, .1 ,.2 ,.3 ,.3, Rating);
      output;
   end;
   state = 'SC';
   Type = 'New';
   do n=1 to 1682;
      CustomerID = floor( 1e9 * ranuni(7) );
      Usage = exp(5+1.35*rannor(1));
      call rantbl(seed, .2 ,.25 ,.1 ,.2, Rating);
      output;
   end;
   Type = 'Old';
   do n=1 to 875;
      CustomerID = floor( 1e9 * ranuni(8) );
      Usage = exp(5.2+1.4*rannor(1));
      call rantbl(seed, .08 ,.12 ,.34 ,.24, Rating);
      output;
   end;
run;

proc sort data=Customer2;
   by CustomerID;
run;

data Customers;
   set Customer1 Customer2;
   format Usage 6.2;
   drop seed;
   if Usage < 0 then Usage = 0;
   if Usage < 50 and Rating <4
      then Rating = Rating +2;
   if Usage > 400 and Rating > 1
      then Rating = Rating -1;
   Usage=Usage/60;
run;

proc sort data=Customers;
   by State Type;
run;

proc surveyselect data=Customers
      method=pps_wr n=25
      seed=1953 out=SampleStrata;
   strata State Type;
   size Usage;
run;

data SampleStrata;
   set SampleStrata;
   SamplingWeight=SamplingWeight*Numberhits;
   keep State Type CustomerID Rating
        Usage SamplingWeight;
run;

title1 'Customer Satisfaction Survey';
title2 'Stratified PPS Sampling';
title3 '(First 10 Observations)';
proc print data=SampleStrata(obs=10);
run;

title 'Customer Satisfaction Survey';
proc surveylogistic data=SampleStrata;
   strata state type/list;
   model Rating (order=internal) = Usage;
   weight SamplingWeight;
run;