Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/11/2011, 20h01   #1
Membre régulier
 
Femme Mariam
Statisticienne-Consultante BI
Inscription : avril 2008
Messages : 127
Détails du profil
Informations personnelles :
Nom : Femme Mariam
Localisation : Canada

Informations professionnelles :
Activité : Statisticienne-Consultante BI
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 127
Points : 96
Points : 96
Par défaut Syntaxe Minimum d'un ARRAY

Bonjour,

Supposons que j'ai plusieurs vecteurs comme suit pour une meme observation:
Prex : Prex1...Prex10...Prexn
Cotinv : Cotinv1...Cotinv10...Cotinvn
Je crée temporairement pprex

Je calcule dans un premier temps.
pprex(i) = prex(i) / cotinv(i);
Je voudrais récupérer le minimum du vecteur en me positionnant à un moment précis.

point(i) = min(of pprex(debut)-pprex(i));
/* cela ne marche pas: syntaxe error il voudrait une virgule ou une parenthèse*/
Le tout se fait dans une boucle do i=debut à fin;.

La question reviendrait à prendre le minimum des valeurs (1 à X) si je suis positionné en X...et de (1 à X+1) si je met replace en X+1.

Merci d'avance.
MDsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 08h03   #2
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 828
Points : 2 828
Bonjour Mariam.
Comme ta boucle va bien de 1 à la fin de l'array, si tu es en X, les valeurs de ton vecteur pour X+1, X+2, etc. sont encore manquantes, donc non prises en compte par la fonction MIN.
Tu peux donc faire le calcul avec MIN(OF pprex[*]) à chaque itération de la boucle, au fur et à mesure que tu remplis le vecteur pprex.
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 14h58   #3
Membre régulier
 
Femme Mariam
Statisticienne-Consultante BI
Inscription : avril 2008
Messages : 127
Détails du profil
Informations personnelles :
Nom : Femme Mariam
Localisation : Canada

Informations professionnelles :
Activité : Statisticienne-Consultante BI
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 127
Points : 96
Points : 96
La solution que tu proposes est intéressante dans le sens ou elle est permet de TOUJOURS avoir le minimum du vecteur quelque soit la position à laquelle on se trouve.
Pourtant cela est légèrement différent de ce que je souhaiterai car je voudrais le minimum des positions précédentes celle ou je me place (la ou je suis inclut).

Voici un petit exemple pour illuster :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
DATA one;
  input code1-code6;
datalines;
3 1 5 4 6 2
9 8 6 5 7 4
3 2 1 9 0 7
8 2 6 4 0 1
5 7 4 3 8 2
;
 
DATA tab;
  keep code1-code6 point :;
  SET one;
  array code(6);
  array point(6);
  do k=1 TO 6;
	point(k)=min(of code(*));
  end;
run;
proc print DATA=tab;
run;
Le point tel que indiqué ici renvoi toujours le minimum du vecteur Code1-Code6.
Son résultat est:
P1 P2 P3 P4 P5 P6
1 1 1 1 1 1
4 4 4 4 4 4
0 0 0 0 0 0
0 0 0 0 0 0
2 2 2 2 2 2

Moi je voudrais le résultat suivant:
P1 P2 P3 P4 P5 P6
3 1 1 1 1 1
9 8 6 5 5 4
3 2 1 1 0 0
8 2 2 2 0 0
5 5 4 3 3 2

P1 = Code1, P2= min (Code1, Code2) P3=min (Code1, Code2, Code3)
P4=min(Code1, Code2, Code3, Code4)...P6=min(code1-code6).

Merci d'avance.
MDsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 15h31   #4
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
Tu peux utiliser une variable tampon dans ta boucle dans laquelle tu stock le min.
Le min est calculé a chaque itération en le comparant avec l'observation courante.
Le min est initialisé avec la première valeur du tableau.
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 15h32   #5
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 828
Points : 2 828
Ah, mais les règles du jeu ont changé entre tes 2 posts ?! Au début, tu indiquais créer une nouvelle série de variables : les PPREX. Et dans ton 2e exemple tu utilises des variables déjà existantes -- et donc forcément, ma solution qui comptait sur le fait que toutes variables non encore parcourues étaient manquantes s'avère fausse.
Avec ton exemple, je ferais en fait :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
DATA tab;
  keep code1-code6 point :;
  SET one;
  array code(6);
  array bis(6) ;
  array point(6);
  do k=1 TO 6;
             bis(k)=code(k) ;
	point(k)=min(of bis(*));
  end;
run;
proc print DATA=tab;
run;
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 15h39   #6
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
Plus court que la variable tampon
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 15h49   #7
Membre régulier
 
Femme Mariam
Statisticienne-Consultante BI
Inscription : avril 2008
Messages : 127
Détails du profil
Informations personnelles :
Nom : Femme Mariam
Localisation : Canada

Informations professionnelles :
Activité : Statisticienne-Consultante BI
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 127
Points : 96
Points : 96
Cette solution fonctionne. Je me disais que les Pprex(i) existe puisque je les crée avant de prendre le minimum. Dans ma tête du moins, c'est comme récupérer la valeur dans le bis(k).

Je vais tenter le coup dans le contexte de mon étude et je vous redonne des nouvelles.
MDsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h02.


 
 
 
 
Partenaires

Hébergement Web