Les posteurs les plus actifs de la semaine
Eric Wajnberg
 
Catz
 
cicino
 
Anny_Nina
 


Array sur sas

Voir le sujet précédent Voir le sujet suivant Aller en bas

Array sur sas

Message par philippe777 le Jeu 26 Sep 2013 - 12:44

Bonjour, je me pratique sur sas à faire des array. Voici ma syntaxe, qui me semble correcte et pourtant je n'obtiens pas le même résultat pour simplement calculer le score toal (même si "scoret" est déjà là; il a été calculé à la main par des étudiants). Mon but est simplement de calculer un autre score total "scoresas". La méthode que j'utilisais avant "if then" fonctionne bien mais est bien plus longue. Merci d'avance à celui ou celle qui pourrait m'aider.




OPTIONS LINESIZE = 80 PAGESIZE = 60 PAGENO = 1 NOLABEL;

data devoir4;

input sujet var01 var02 var03 var04 var05 var06 var07 var08 var09 var10 var11 var12 var13 var14 var15
var16 var17 var18 var19 var20 var21 var22 var23 var24 scoret;

***P;
array devoir1 {24} var01 var02 var03 var04 var05 var06 var07 var08 var09 var10 var11 var12
var13 var14 var15 var16 var17 var18 var19 var20 var21 var22 var23 var24;
do i = 1 to 4;
if devoir1[i]= 3 then devoir1[i]=2;
end;
drop i;

****j;
array devoir2 {12} var02 var04 var06 var08 var10 var12 var14 var16 var18 var20 var22 var24;
do i = 1 to 4;
if devoir2[i]= 1 then devoir2[i]=1;
end;
drop i;

array devoir3 {12} var01 var03 var05 var07 var09 var11 var13 var15 var17 var19 var21 var23;
do i = 1 to 4;
if devoir3[i]= 1 then devoir3[i]=3;
end;
drop i;

***r;
array devoir4 {12} var02 var04 var06 var08 var10 var12 var14 var16 var18 var20 var22 var24;
do i = 1 to 4;
if devoir4[i]= 2 then devoir4[i]=1;
end;
drop i;

array devoir5 {12} var01 var03 var05 var07 var09 var11 var13 var15 var17 var19 var21 var23;
do i = 1 to 4;
if devoir5[i]= 2 then devoir5[i]=3;
end;
drop i;

***s;
array devoir6 {12} var02 var04 var06 var08 var10 var12 var14 var16 var18 var20 var22 var24;
do i = 1 to 4;
if devoir6[i]= 4 then devoir6[i]=3;
end;
drop i;

array devoir7 {12} var01 var03 var05 var07 var09 var11 var13 var15 var17 var19 var21 var23;
do i = 1 to 4;
if devoir7[i]= 4 then devoir7[i]=1;
end;
drop i;

scoresas = var01+var02+var03+var04+var05+var06+var07+var08+var09+var10+var11+var12
+var13+var14+var15+var16+var17+var18+var19+var20+var21+var22+var23+var24;

dif = scoresas-scoret;

cards;
101 1 4 1 3 1 3 3 4 2 4 2 4 1 2 1 4 2 4 2 4 2 2 1 4 61
102 3 4 2 4 3 3 3 4 3 4 3 2 3 2 2 2 2 3 3 3 3 4 3 3 53
103 1 4 2 4 2 3 1 4 3 4 2 1 1 1 3 1 1 4 4 4 3 4 3 4 59
104 3 2 3 3 1 3 4 4 3 4 4 3 4 3 2 3 3 4 3 2 3 4 4 3 49
105 3 4 2 4 3 4 3 4 3 3 2 1 2 2 3 2 2 4 3 4 3 4 3 3 53
106 1 4 2 4 4 3 4 4 3 4 1 2 2 3 3 3 3 2 2 4 2 4 3 3 56
107 3 3 2 3 3 3 2 4 2 3 1 3 4 2 2 3 2 3 4 3 2 3 3 2 52
108 1 2 2 4 2 2 3 3 3 3 2 1 1 3 2 2 1 4 1 3 2 4 2 4 58
109 1 3 1 4 2 3 1 4 3 3 4 4 3 1 2 4 2 3 3 4 1 4 3 4 57
110 4 3 3 4 3 3 2 4 3 4 3 3 3 2 3 3 4 3 4 3 4 4 3 3 48
111 2 3 2 4 3 4 3 4 2 4 2 1 3 2 2 2 2 3 2 4 1 4 3 4 60
112 1 3 1 4 1 4 3 4 2 4 3 1 1 3 2 1 2 4 2 4 3 4 3 3 62
113 3 4 2 4 2 4 3 4 2 4 3 4 2 3 2 4 2 4 3 4 2 4 3 3 65
114 1 4 3 4 1 4 2 4 2 4 3 4 1 4 2 2 1 4 2 4 1 4 3 4 66
115 2 2 3 4 2 4 4 4 2 2 3 4 3 1 2 1 1 4 3 4 2 4 3 4 47
116 3 3 4 3 2 3 1 4 3 4 3 1 3 3 2 4 2 4 2 3 3 4 3 3 56
117 3 4 3 4 2 4 3 4 2 3 2 1 2 3 1 2 2 4 2 4 1 4 3 4 62
118 1 3 2 4 3 3 2 3 3 4 2 3 2 1 2 1 2 4 2 4 2 4 3 4 58
119 1 3 3 3 2 3 3 1 3 3 3 4 3 2 3 2 2 4 2 3 2 4 3 4 52
120 2 4 2 4 3 3 3 4 3 3 2 2 3 3 2 4 3 3 3 3 2 4 3 3 54
121 1 3 1 4 4 3 2 4 4 3 3 2 4 3 1 4 3 3 3 2 3 4 4 3 50
122 4 4 2 4 2 4 3 3 3 4 3 2 4 1 3 2 2 4 3 3 2 4 4 4 53
123 1 4 1 4 2 4 3 4 2 4 2 3 1 3 1 1 2 4 2 4 1 4 1 4 67
124 1 3 2 4 3 3 2 4 4 3 2 1 3 4 1 3 1 2 3 3 2 3 4 2 53
;
run;

proc means n mean std skew kurt min max;
var scoresas scoret;
run;

proc print;
var scoresas scoret dif;
run;

philippe777

Nombre de messages : 12
Age : 28
Localisation : Canada
Date d'inscription : 23/08/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Array sur sas

Message par niaboc le Jeu 26 Sep 2013 - 13:10

Bonjour,

je vois pas trop ce que tu veux faire avec tes étapes :

Code:
***P;
array devoir1 {24} var01 var02 var03 var04 var05 var06 var07 var08 var09 var10 var11 var12
var13 var14 var15 var16 var17 var18 var19 var20 var21 var22 var23 var24;
do i = 1 to 4;
if devoir1[i]= 3 then devoir1[i]=2;
end;
drop i;
est-ce que tu pourrais détailler ce que tu veux faire avec ça?

avatar
niaboc

Nombre de messages : 923
Age : 30
Localisation : Paris
Date d'inscription : 05/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Array sur sas

Message par philippe777 le Ven 27 Sep 2013 - 16:47

Désoler pour le delai de réponse.

Donc le but ici est de recalculer un nouveau score total selon les modalité suivant.

Les 3 doivent devenir 2
Questions paires: les 1 restent des 1, les 2 devienne des 1 et les 4 deviene des 3
Questions impaires: les 1 deviennent des 3, les 2 deviennet des 3 et les 4 deviennent des 1.

Voila!
D'habitude je l'aurais fait avec la syntaxe suivante que j'ai testé; elle fonctionne.

*** les P;

if var01= 3 then var01b = 2;
if var02= 3 then var02b = 2;
if var03= 3 then var03b = 2;
if var04= 3 then var04b = 2;
if var05= 3 then var05b = 2;
if var06= 3 then var06b = 2;
if var07= 3 then var07b = 2;
if var08= 3 then var08b = 2;
if var09= 3 then var09b = 2;
if var10= 3 then var10b = 2;
if var11= 3 then var11b = 2;
if var12= 3 then var12b = 2;
if var13= 3 then var13b = 2;
if var14= 3 then var14b = 2;
if var15= 3 then var15b = 2;
if var16= 3 then var16b = 2;
if var17= 3 then var17b = 2;
if var18= 3 then var18b = 2;
if var19= 3 then var19b = 2;
if var20= 3 then var20b = 2;
if var21= 3 then var21b = 2;
if var22= 3 then var22b = 2;
if var23= 3 then var23b = 2;
if var24= 3 then var24b = 2;

*** les J;

if var01= 1 then var01b = 3;
if var02= 1 then var02b = 1;
if var03= 1 then var03b = 3;
if var04= 1 then var04b = 1;
if var05= 1 then var05b = 3;
if var06= 1 then var06b = 1;
if var07= 1 then var07b = 3;
if var08= 1 then var08b = 1;
if var09= 1 then var09b = 3;
if var10= 1 then var10b = 1;
if var11= 1 then var11b = 3;
if var12= 1 then var12b = 1;
if var13= 1 then var13b = 3;
if var14= 1 then var14b = 1;
if var15= 1 then var15b = 3;
if var16= 1 then var16b = 1;
if var17= 1 then var17b = 3;
if var18= 1 then var18b = 1;
if var19= 1 then var19b = 3;
if var20= 1 then var20b = 1;
if var21= 1 then var21b = 3;
if var22= 1 then var22b = 1;
if var23= 1 then var23b = 3;
if var24= 1 then var24b = 1;

*** les R;

if var01= 2 then var01b = 3;
if var02= 2 then var02b = 1;
if var03= 2 then var03b = 3;
if var04= 2 then var04b = 1;
if var05= 2 then var05b = 3;
if var06= 2 then var06b = 1;
if var07= 2 then var07b = 3;
if var08= 2 then var08b = 1;
if var09= 2 then var09b = 3;
if var10= 2 then var10b = 1;
if var11= 2 then var11b = 3;
if var12= 2 then var12b = 1;
if var13= 2 then var13b = 3;
if var14= 2 then var14b = 1;
if var15= 2 then var15b = 3;
if var16= 2 then var16b = 1;
if var17= 2 then var17b = 3;
if var18= 2 then var18b = 1;
if var19= 2 then var19b = 3;
if var20= 2 then var20b = 1;
if var21= 2 then var21b = 3;
if var22= 2 then var22b = 1;
if var23= 2 then var23b = 3;
if var24= 2 then var24b = 1;

*** les S;

if var01= 4 then var01b = 1;
if var02= 4 then var02b = 3;
if var03= 4 then var03b = 1;
if var04= 4 then var04b = 3;
if var05= 4 then var05b = 1;
if var06= 4 then var06b = 3;
if var07= 4 then var07b = 1;
if var08= 4 then var08b = 3;
if var09= 4 then var09b = 1;
if var10= 4 then var10b = 3;
if var11= 4 then var11b = 1;
if var12= 4 then var12b = 3;
if var13= 4 then var13b = 1;
if var14= 4 then var14b = 3;
if var15= 4 then var15b = 1;
if var16= 4 then var16b = 3;
if var17= 4 then var17b = 1;
if var18= 4 then var18b = 3;
if var19= 4 then var19b = 1;
if var20= 4 then var20b = 3;
if var21= 4 then var21b = 1;
if var22= 4 then var22b = 3;
if var23= 4 then var23b = 1;
if var24= 4 then var24b = 3;

scoresas = var01b+var02b+var03b+var04b+var05b+var06b+var07b+var08b+var09b+var10b+var11b+var12b+
var13b+var14b+var15b+var16b+var17b+var18b+var19b+var20b+var21b+var22b+var23b+var24b;

philippe777

Nombre de messages : 12
Age : 28
Localisation : Canada
Date d'inscription : 23/08/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Array sur sas

Message par niaboc le Sam 28 Sep 2013 - 10:24

Tu vas être bloqué pour les impairs dans tes array, car tu ne changes pas le nom de la variable et que tu changes le 2 ou 3 puis le 3 en 2 par exemple.

Il faut te créer une nouvelle variable.

Et d'ailleurs tu peux alléger ces dernières, au lieu d'écrire :
Code:
array devoir5 {12} var01 var03 var05 var07 var09 var11 var13 var15 var17 var19 var21 var23;
do i = 1 to 4;
if devoir5[i]= 2 then devoir5[i]=3;
end;
tu peux écrire :
Code:
array devoir5  var01 var03 var05 var07 var09 var11 var13 var15 var17 var19 var21 var23;
do over devoir5;
if devoir5= 2 then devoir5=3
end;
mais comme tu vas être bloqué sur les impairs, tu dois créer des nouvelles variables. Cette méthode avec les array ne sera donc pas possibles.

Tu peux t'amuser à le faire avec des macro variables, c'est faisable.
tu fais une boucle, tu repères les variables pairs et impairs, et tu crées tes nouvelles variables.
Pour faciliter la boucle, code les variable var0. en var. .

Bonne continuation!
avatar
niaboc

Nombre de messages : 923
Age : 30
Localisation : Paris
Date d'inscription : 05/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Array sur sas

Message par philippe777 le Lun 30 Sep 2013 - 13:12

Merci beaucoup pour cette réponse.

philippe777

Nombre de messages : 12
Age : 28
Localisation : Canada
Date d'inscription : 23/08/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Array sur sas

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum