L'analyse de données d'enquête nécessite une rigueur statistique particulière pour compenser les biais d'échantillonnage, et la procédure PROC SURVEYLOGISTIC est l'outil de référence pour intégrer ces complexités. Ce script illustre parfaitement la prise en compte d'un plan de sondage stratifié : en utilisant l'instruction STRATUM combinée aux poids de sondage (WEIGHT), vous garantissez que vos estimations d'erreurs types sont corrigées pour refléter la réalité de la population totale (définie ici dans la table Enrollment), et non seulement celle de l'échantillon répondant.
L'expertise technique réside ici dans le choix de la fonction de lien au sein de l'instruction MODEL. Le premier modèle utilise un logit cumulatif par défaut, idéal pour une variable dépendante ordinale (comme une échelle de Likert). Cependant, le passage au Logit Généralisé (link=glogit) dans le second modèle est une démarche d'expert cruciale lorsque l'hypothèse des rapports de côtes proportionnels est rejetée. En spécifiant une catégorie de référence (ref='neutral'), vous transformez l'interprétation : vous ne comparez plus des niveaux cumulés, mais la probabilité de chaque modalité ("like", "dislike") spécifiquement par rapport à la neutralité.
Une astuce d'expert pour optimiser ce code : l'option total=Enrollment dans l'instruction PROC est fondamentale. Elle permet à SAS d'appliquer la correction pour population finie (FPC), ce qui affine la précision de vos intervalles de confiance lorsque votre échantillon représente une part significative de la population totale. Sans cette option, vos variances seraient surestimées, rendant vos tests statistiques inutilement conservateurs.
Type : CREATION_INTERNE
Tous les jeux de données ('Enrollment' et 'WebSurvey') sont créés directement dans le script à l'aide d'étapes DATA et de l'instruction 'datalines'. Aucune source de données externe n'est requise.
| 1 | PROC FORMAT; |
| 2 | value Class |
| 3 | 1='Freshman' 2='Sophomore' |
| 4 | 3='Junior' 4='Senior'; |
| 5 | RUN; |
| 1 | DATA Enrollment; |
| 2 | FORMAT Class Class.; |
| 3 | INPUT Class _TOTAL_; |
| 4 | DATALINES; |
| 5 | 1 3734 |
| 6 | 2 3565 |
| 7 | 3 3903 |
| 8 | 4 4196 |
| 9 | ; |
| 10 | RUN; |
| 1 | PROC FORMAT; |
| 2 | value Design 1='A' 2='B' 3='C'; |
| 3 | value Rating |
| 4 | 1='dislike very much' |
| 5 | 2='dislike' |
| 6 | 3='neutral' |
| 7 | 4='like' |
| 8 | 5='like very much'; |
| 9 | RUN; |
| 1 | DATA WebSurvey; |
| 2 | FORMAT Class Class. Design Design. Rating Rating.; |
| 3 | DO Class=1 to 4; |
| 4 | DO Design=1 to 3; |
| 5 | DO Rating=1 to 5; |
| 6 | INPUT Count @@; |
| 7 | OUTPUT; |
| 8 | END; |
| 9 | END; |
| 10 | END; |
| 11 | DATALINES; |
| 12 | 10 34 35 16 15 8 21 23 26 22 5 10 24 30 21 |
| 13 | 1 14 25 23 37 11 14 20 34 21 16 19 30 23 12 |
| 14 | 19 12 26 18 25 11 14 24 33 18 10 18 32 23 17 |
| 15 | 8 15 35 30 12 15 22 34 9 20 2 34 30 18 16 |
| 16 | ; |
| 17 | RUN; |
| 1 | DATA WebSurvey; |
| 2 | SET WebSurvey; |
| 3 | IF Class=1 THEN Weight=3734/300; |
| 4 | IF Class=2 THEN Weight=3565/300; |
| 5 | IF Class=3 THEN Weight=3903/300; |
| 6 | IF Class=4 THEN Weight=4196/300; |
| 7 | RUN; |
| 1 | PROC PRINT DATA=WebSurvey(obs=20); |
| 2 | RUN; |
| 1 | PROC SURVEYLOGISTIC DATA=WebSurvey total=Enrollment; |
| 2 | stratum Class; |
| 3 | freq Count; |
| 4 | class Design; |
| 5 | model Rating (order=internal) = design; |
| 6 | weight Weight; |
| 7 | RUN; |
| 1 | PROC SURVEYLOGISTIC DATA=WebSurvey total=Enrollment; |
| 2 | stratum Class; |
| 3 | freq Count; |
| 4 | class Design; |
| 5 | model Rating (ref='neutral') = Design /link=glogit; |
| 6 | weight Weight; |
| 7 | RUN; |