Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Macro
Macro Forum d'entraide sur le langage Macro de SAS
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 22/05/2008, 14h49   #1
Futur Membre du Club
 
Inscription : mai 2008
Messages : 101
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 101
Points : 19
Points : 19
Par défaut macros utilisant des boucles imbriquées et sql :

Bonjour!!

j'utilise une base de données avec plusieurs tables! pour réaliser certains calculs de parèmètres statistques j'ai réalisé des macros utilisant des boucles imbriquées ( comme indices de parcours des tables)
je me suis rendu compte en faisant un check sur ces tables que, certains attributs ne prennent pas des valeurs successives:
je m'explique: attribut1 (1,2,3,8,25,....) et donc la valeur de l'indice exemple "j" de parcours ne correspond pas à la valeur de l'attribut:

première solution changer les valeurs de l'attribut sous forme de suite 1,2,3,...

mais ce travail est très lourd sachant que j'ai beaucoup des tables énormes

Si quelqu'un a une illumination ça sera cool
nostress est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 14h55   #2
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
Tu ne peux gérer un autre compteur (en plus de ceux de tes boucles, j'imagine que tu utilises les valeurs de ces compteurs dans tes tables) qui ne sera pas impacté par les tests et qui prendra les bonnes valeurs?
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 15h29   #3
Futur Membre du Club
 
Inscription : mai 2008
Messages : 101
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 101
Points : 19
Points : 19
Ces indices de parcours servent de lien pour tester des attributs tables:


%do d=1 %to &nbr_desc;

proc sql noprint;
select count(distinct Idproduit) into: nbr_prod
from &data
where iddescripteur=&d;
quit; ......................................................
nostress est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 15h31   #4
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
Je ne vois pas très bien le problème. Est ce que c'est possible d'expliquer un peut plus.
Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 15h58   #5
Futur Membre du Club
 
Inscription : mai 2008
Messages : 101
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 101
Points : 19
Points : 19
DONNEES( ATT1,ATT2,ATT,ATT4)

att1........att2 att3 att4
1........1
1........2
1........4
1........5
1........6
1 ........7
2........1
2........2
2........3
2........4
2........5
2........6
2........7
4 ........1
4........2
4........3
. .
. .
. .

je donne un apperçu sur la table sur laquelle s'effectue les calculs. je dois effectuer le calcul sur chaque bloc de valeurs de att1( quand att1 =1,2,4,....).
pour chaque bloc att1: les autres boucles imbriquées se font alors pour traiter les valeurs d'attributs 2,3,4,5

le HIC est que dès que j'arrive à la valeur de indice j=3 donc ne concorde pas car il n'y a pas de valeur 3 pour att1:

%do j=1 %to &nbr_desc;

proc sql noprint;
select count(distinct att2) into: nbr_prod
from &data
where att1=&j;
quit;
..............................................etc

et la tt les résultats sont faux!!!!!!!!!!!!!!
j'espère que j'ai expliqué mon pbm
nostress est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 16h18   #6
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
Je te propose de créer un vecteur qui contient les valeurs (attr1) distinct de table.
ta boucle ne change pas.

j'imagine que le i doit être l'indice de la boucle au dessus (prends les valeurs de la colonne attr1)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
proc sql;
SELECT DISTINCT(att2) INTO :var separated BY ' '
FROM &DATA
WHERE att1=&i;
 
%do j=1 %TO &nbr_desc;
 
proc sql noprint;
SELECT count(DISTINCT att2) INTO: nbr_prod
FROM &DATA
WHERE att1=%scan(&var,&j,' ');
quit;
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 16h22   #7
Membre confirmé
 
Inscription : avril 2008
Messages : 233
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2008
Messages : 233
Points : 216
Points : 216
Tu peux préciser quels sont les calculs que tu fais ? Parce que pour différents calculs on peut avoir des différentes solutions.
Par exemple, si tes calculs sont assez simples (i.e. réalisables avec des fonctions d'agrégation standards), tu n'a qu'à faire une requête SQL avec des group by. Si les calculs sont un peu plus compliqués, tu peut trier ta table, faire une étape data avec plein de vérifications pour détecter le passage d'un segment à l'autre (par exemple, la modification de valeur de att1) pour lancer tes calculs et - éventuellement - les sortir dans une table.
Bref, un peu plus d'information, stp.
green_fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 16h23   #8
Membre confirmé
 
Inscription : avril 2008
Messages : 233
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2008
Messages : 233
Points : 216
Points : 216
Citation:
Envoyé par bahraoui Voir le message
Je te propose de créer un vecteur qui contient les valeurs (attr1) distinct de table.
ta boucle ne change pas.
Pas mal !
green_fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 16h25   #9
Futur Membre du Club
 
Inscription : mai 2008
Messages : 101
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 101
Points : 19
Points : 19
Merci, je vais effectuer les changements, et je te tienderai au courant
nostress est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 17h06   #10
Futur Membre du Club
 
Inscription : mai 2008
Messages : 101
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 101
Points : 19
Points : 19
ça marche super bien

merci bcp!!! la je pourrai optimiser ma macro sachant qu'elle doit traiter 600 jeux de données, c un grand saut vers la résolution de mon sujet.
MERCI
nostress est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 17h08   #11
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
Clique sur RESOLU
bahraoui 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 17h23.


 
 
 
 
Partenaires

Hébergement Web