Programme de calcul des groupes iso-ressources (langage SAS)


   /*************************************************/
   /* Chiffrement des axes AGGIR sur le             */
   /* fichier d'enquête en domicile ordinaire       */
   /*************************************************/
   /*  gprojet\gdtincap\aggir\girv3.sas             */
   /*************************************************/
   /* Remarque : pour un travail sur le fichier en  */
   /* institution, il faudra adapter ce programme   */
   /* au questionnement qui est différent           */
   /*********************************************** */
data aggir; merge hid99.modb_c aggir13; by ident numind;
      if btoi1 ne ' ' and bale1 ne ' ';
       axe1='9';
   if bcoh1 in ('0','4') or bcoh2='3' then axe1='C';
   else if bcoh2='2' then axe1='B';
   else axe1='A';
 /* 2. Axe 2 : Orientation */
 /**************************/
       axe2='9';
     if bori1='3' or bori2='4' then axe2='C';
     else if bori2='3' or bori1='2' then axe2='B';
     else axe2='A';
      run;
 *** 16620 obs : le GIR n'est pas calculable pour les enfants de moins de 5 ans ;
 /* I. Passage des réponses au questionnaire */
 /*     aux "notes" des 10 axes AGGIR        */
 /********************************************/
 data aggir; merge aggir (keep=ident numind axe1-axe2 in=x)
                   hid99.modb_c; by ident numind;
    if x=0 then enfant=1; else enfant=2;
 /* 3. Axe 3 : Toilette */
 /***********************/
       axe3='9';
       if btoi1 in ('0','4','6') then axe3='C';
       else if btoi1='5' then axe3='B';             * ou mettre le 3;
       else if btoi1 in ('1','2','3') then axe3='A';
 /* 4. Axe 4 : Habillage */
 /************************/
       axe4='9';
       if bhab1 in ('0','6') then axe4='C';
       else if bhab1 in ('4','5') then axe4='B';
       else axe4='A';         * ou mettre le 3;
 /* 5. Axe 5 : Alimentation */
 /***************************/
       axe5='9';
       if bali1='0' then axe5='C';
       else do;
         if bali1 in ('4','5') and bali2 in ('0','4') then serv='C';
         else if bali1 in ('4','5') or bali2 in ('0','4') then serv='B';        * ou mettre le 3;
         else if bali1 in ('1','2','3') and bali2 in ('1','2','3') then serv='A';
         if bali3='4' then mang='C';
         else if bali3='3' then mang='B';
         else if bali3 in ('1','2') then mang='A';
         if serv='C' and mang='C' then axe5='C';
         else if serv='C' and mang='B' then axe5='C';
         else if serv='B' and mang='C' then axe5='C';
         else if serv='A' and mang='A' then axe5='A';
         else axe5='B';
       end;
 /* 6. Axe 6 : Elimination */
 /**************************/
       axe6='9';
       if beli1='0' or beli3='5' then axe6='C';
       else if beli1='5' then do;
            if beli3=' ' then axe6='B';
            else axe6='C';
       end;
       else if beli1='4' or beli3='4' then axe6='B';             * ou mettre les 3 ;
       else if beli1 in ('1','2','3','9')
            and beli3 in ('1','2','3','9') then axe6='A';
 /* 7. Axe 7 : Transferts */
 /*************************/
       axe7='9';
       if bmob1='1' or (btra1='4' and btra2='4') or btra2='0' then axe7='C';
       else if btra1='4' or (btra2='4') or (btra1='3' and btra2='3') then axe7='B';
       else if btra1 in ('1','2','3','9')
            and btra2 in ('1','2','3') then axe7='A';
 /* 8. Axe 8 : Déplacements à l'intérieur */
 /*****************************************/
       axe8='9';
       if bmob1 in ('1','2') or bdpi1='3' then axe8='C';
       else if bdpi1='2'
               or bdpi2 in ('4','5') then axe8='B';
       else if bdpi1='1' then axe8='A';
 /* 9. Axe 9 : Déplacements à l'extérieur */
 /*****************************************/
       axe9='9';
       if bdpe2=0 or bmob1 in ('1','2','3') then axe9='C';
       else if 0<bdpe2<=100 then axe9='B';
       else if 100<bdpe2 then axe9='A';
 /* 10. Axe 10 : Communication à distance */
 /*****************************************/
       axe10='9';
       if bale1 in ('2','3','4') then axe10='C';
       else if bale1='1' then axe10='B';
       else if bale1 in ('0','9') then axe10='A';
 run;
   /*******************************************************/
   /* Programme de calcul des groupes iso-ressources      */
   /* conforme à l'algorithme publié au J.O. du 30/04/97  */
   /*******************************************************/
   /*   gprojet\gdtincap\prog\GIRCALC2.SAS                */
   /********************** (08/02/99) *********************/
   /* Préparation du fichier standard */
   /***********************************/
   data agirgrp;
          set aggir (keep=ident numind axe1-axe10 enfant) ; by ident numind;
       if axe1 ne '9';
       array axei(10) axe1-axe10;
       /* Groupe A */
       do i=1 to 10;
         if i=1 then valeur=0;
         if axei(i)='C' then do;
           if i=1 then valeur=valeur+2000;
           else if i=2 then valeur=valeur+1200;
           else if i=3 then valeur=valeur+40;
           else if i=4 then valeur=valeur+40;
           else if i=5 then valeur=valeur+60;
           else if i=6 then valeur=valeur+100;
           else if i=7 then valeur=valeur+800;
           else if i=8 then valeur=valeur+200;
           else if i=9 then valeur=valeur+0;
           else if i=10 then valeur=valeur+0;
         end;
         else if axei(i)='B' then do;
           if i=1 then valeur=valeur+0;
           else if i=2 then valeur=valeur+0;
           else if i=3 then valeur=valeur+16;
           else if i=4 then valeur=valeur+16;
           else if i=5 then valeur=valeur+20;
           else if i=6 then valeur=valeur+16;
           else if i=7 then valeur=valeur+120;
           else if i=8 then valeur=valeur+32;
           else if i=9 then valeur=valeur+0;
           else if i=10 then valeur=valeur+0;
         end;
       end;
       if valeur>=4380 then do; rang=1; gir=1; end;
         else if valeur>=4140 then do; rang=2; gir=2; end;
         else if valeur>=3390 then do; rang=3; gir=2; end;
       if valeur>=3390 then go to FIN;
       /* Groupe B */
       do i=1 to 10;
         if i=1 then valeur=0;
         if axei(i)='C' then do;
           if i=1 then valeur=valeur+1500;
           else if i=2 then valeur=valeur+1200;
           else if i=3 then valeur=valeur+40;
           else if i=4 then valeur=valeur+40;
           else if i=5 then valeur=valeur+60;
           else if i=6 then valeur=valeur+100;
           else if i=7 then valeur=valeur+800;
           else if i=8 then valeur=valeur-80;
           else if i=9 then valeur=valeur+0;
           else if i=10 then valeur=valeur+0;
         end;
         else if axei(i)='B' then do;
           if i=1 then valeur=valeur+320;
           else if i=2 then valeur=valeur+120;
           else if i=3 then valeur=valeur+16;
           else if i=4 then valeur=valeur+16;
           else if i=5 then valeur=valeur+0;
           else if i=6 then valeur=valeur+16;
           else if i=7 then valeur=valeur+120;
           else if i=8 then valeur=valeur-40;
           else if i=9 then valeur=valeur+0;
           else if i=10 then valeur=valeur+0;
         end;
       end;
       if valeur>=2016 then do; rang=4; gir=2; end;
       if valeur>=2016 then go to FIN;
       /* gir C */
       do i=1 to 10;
         if i=1 then valeur=0;
         if axei(i)='C' then do;
           if i=1 then valeur=valeur+0;
           else if i=2 then valeur=valeur+0;
           else if i=3 then valeur=valeur+40;
           else if i=4 then valeur=valeur+40;
           else if i=5 then valeur=valeur+60;
           else if i=6 then valeur=valeur+160;
           else if i=7 then valeur=valeur+1000;
           else if i=8 then valeur=valeur+400;
           else if i=9 then valeur=valeur+0;
           else if i=10 then valeur=valeur+0;
         end;
         else if axei(i)='B' then do;
           if i=1 then valeur=valeur+0;
           else if i=2 then valeur=valeur+0;
           else if i=3 then valeur=valeur+16;
           else if i=4 then valeur=valeur+16;
           else if i=5 then valeur=valeur+20;
           else if i=6 then valeur=valeur+20;
           else if i=7 then valeur=valeur+200;
           else if i=8 then valeur=valeur+40;
           else if i=9 then valeur=valeur+0;
           else if i=10 then valeur=valeur+0;
         end;
       end;
       if valeur>=1700 then do; rang=5; gir=2; end;
         else if valeur>=1432 then do; rang=6; gir=2; end;
       if valeur>=1432 then go to FIN;
       /* gir D */
       do i=1 to 10;
         if i=1 then valeur=0;
         if axei(i)='C' then do;
           if i=1 then valeur=valeur+0;
           else if i=2 then valeur=valeur+0;
           else if i=3 then valeur=valeur+0;
           else if i=4 then valeur=valeur+0;
           else if i=5 then valeur=valeur+2000;
           else if i=6 then valeur=valeur+400;
           else if i=7 then valeur=valeur+2000;
           else if i=8 then valeur=valeur+200;
           else if i=9 then valeur=valeur+0;
           else if i=10 then valeur=valeur+0;
         end;
         else if axei(i)='B' then do;
           if i=1 then valeur=valeur+0;
           else if i=2 then valeur=valeur+0;
           else if i=3 then valeur=valeur+0;
           else if i=4 then valeur=valeur+0;
           else if i=5 then valeur=valeur+200;
           else if i=6 then valeur=valeur+200;
           else if i=7 then valeur=valeur+200;
           else if i=8 then valeur=valeur+0;
           else if i=9 then valeur=valeur+0;
           else if i=10 then valeur=valeur+0;
         end;
       end;
       if valeur>=2400 then do; rang=7; gir=2; end;
       if valeur>=2400 then go to FIN;
       /* gir E */
       do i=1 to 10;
         if i=1 then valeur=0;
         if axei(i)='C' then do;
           if i=1 then valeur=valeur+400;
           else if i=2 then valeur=valeur+400;
           else if i=3 then valeur=valeur+400;
           else if i=4 then valeur=valeur+400;
           else if i=5 then valeur=valeur+400;
           else if i=6 then valeur=valeur+800;
           else if i=7 then valeur=valeur+800;
           else if i=8 then valeur=valeur+200;
           else if i=9 then valeur=valeur+0;
           else if i=10 then valeur=valeur+0;
         end;
         else if axei(i)='B' then do;
           if i=1 then valeur=valeur+0;
           else if i=2 then valeur=valeur+0;
           else if i=3 then valeur=valeur+100;
           else if i=4 then valeur=valeur+100;
           else if i=5 then valeur=valeur+100;
           else if i=6 then valeur=valeur+100;
           else if i=7 then valeur=valeur+100;
           else if i=8 then valeur=valeur+0;
           else if i=9 then valeur=valeur+0;
           else if i=10 then valeur=valeur+0;
         end;
       end;
       if valeur>=1200 then do; rang=8; gir=3; end;
       if valeur>=1200 then go to FIN;
       /* gir F */
       do i=1 to 10;
         if i=1 then valeur=0;
         if axei(i)='C' then do;
           if i=1 then valeur=valeur+200;
           else if i=2 then valeur=valeur+200;
           else if i=3 then valeur=valeur+500;
           else if i=4 then valeur=valeur+500;
           else if i=5 then valeur=valeur+500;
           else if i=6 then valeur=valeur+500;
           else if i=7 then valeur=valeur+500;
           else if i=8 then valeur=valeur+200;
           else if i=9 then valeur=valeur+0;
           else if i=10 then valeur=valeur+0;
         end;
         else if axei(i)='B' then do;
           if i=1 then valeur=valeur+100;
           else if i=2 then valeur=valeur+100;
           else if i=3 then valeur=valeur+100;
           else if i=4 then valeur=valeur+100;
           else if i=5 then valeur=valeur+100;
           else if i=6 then valeur=valeur+100;
           else if i=7 then valeur=valeur+100;
           else if i=8 then valeur=valeur+0;
           else if i=9 then valeur=valeur+0;
           else if i=10 then valeur=valeur+0;
         end;
       end;
       if valeur>=800 then do; rang=9; gir=3; end;
       if valeur>=800 then go to FIN;
       /* gir G */
       do i=1 to 10;
         if i=1 then valeur=0;
         if axei(i)='C' then do;
           if i=1 then valeur=valeur+150;
           else if i=2 then valeur=valeur+150;
           else if i=3 then valeur=valeur+300;
           else if i=4 then valeur=valeur+300;
           else if i=5 then valeur=valeur+500;
           else if i=6 then valeur=valeur+500;
           else if i=7 then valeur=valeur+400;
           else if i=8 then valeur=valeur+200;
           else if i=9 then valeur=valeur+0;
           else if i=10 then valeur=valeur+0;
         end;
         else if axei(i)='B' then do;
           if i=1 then valeur=valeur+0;
           else if i=2 then valeur=valeur+0;
           else if i=3 then valeur=valeur+200;
           else if i=4 then valeur=valeur+200;
           else if i=5 then valeur=valeur+200;
           else if i=6 then valeur=valeur+200;
           else if i=7 then valeur=valeur+200;
           else if i=8 then valeur=valeur+100;
           else if i=9 then valeur=valeur+0;
           else if i=10 then valeur=valeur+0;
         end;
       end;
       if valeur>=650 then do; rang=10; gir=4; end;
       if valeur>=650 then go to FIN;
       /* gir H */
       do i=1 to 10;
         if i=1 then valeur=0;
         if axei(i)='C' then do;
           if i=1 then valeur=valeur+0;
           else if i=2 then valeur=valeur+0;
           else if i=3 then valeur=valeur+3000;
           else if i=4 then valeur=valeur+3000;
           else if i=5 then valeur=valeur+3000;
           else if i=6 then valeur=valeur+3000;
           else if i=7 then valeur=valeur+1000;
           else if i=8 then valeur=valeur+1000;
           else if i=9 then valeur=valeur+0;
           else if i=10 then valeur=valeur+0;
         end;
         else if axei(i)='B' then do;
           if i=1 then valeur=valeur+0;
           else if i=2 then valeur=valeur+0;
           else if i=3 then valeur=valeur+2000;
           else if i=4 then valeur=valeur+2000;
           else if i=5 then valeur=valeur+2000;
           else if i=6 then valeur=valeur+2000;
           else if i=7 then valeur=valeur+2000;
           else if i=8 then valeur=valeur+1000;
           else if i=9 then valeur=valeur+0;
           else if i=10 then valeur=valeur+0;
         end;
       end;
       if valeur>=4000 then do; rang=11; gir=4; end;
         else if valeur>=2000 then do; rang=12; gir=5; end;
         else do; if valeur ne . then do; rang=13; gir=6; end;  else gir=.; end;
FIN:      output;
    run;
 *** 16916 obs ;
    data hid99.agirgrp (keep=ident numind gir); set agirgrp; by ident numind;
       if enfant=1 then gir=.;
    run;
   /* Attention : on a mis pour les enfants de moins de 5 ans    */
   /*  le GIR à valeur manquante, ce qui est logique             */

Retrour page d'accueil de l'enquête