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 25/05/2008, 19h21   #1
Nouveau Membre du Club
 
Inscription : mai 2008
Messages : 45
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 45
Points : 32
Points : 32
Par défaut merge dans une boucle

Bonjour,

est ce que quelqu'un peut m'aider,
j'ai gneneré des tables contenant une observation chacune; ils ont le même identifiant type et le contenu de cette colonne contient le chiffre zero , donc pas la peine de trier !

j'ai crée mon fichier res1 en dehors de mon etape data de telle sorte que mon tableau de jointure se retrouve a l'interieur, le probleme que j'ai c'est que je ne retrouve après la procedure de jointure qu'un seul tableau au lieu de 47; ils sont tous ecrasés donc je ne vois vraiment pas ce qu'il faut faire pour que ça marche

merci encore


la boucle ci-dessous: la fonction merge est a la fin de la boucle



Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
%macro test6b(fichier);
 
 
DATA nume;
SET &fichier;
keep _NUMERIC_;
run;
 
 
 
proc contents DATA=nume out=Des;
run;
 
/*description variable quantitatives*/
%let i= _N_;
DATA Descar;
SET  Des;
 
      call symput(compress("nomv"||_N_),NAME);
	  varId=symget("nomv"||LEFT(put(_N_,4.)));
        run;
 
 
%LOCAL nbc;
 
 
DATA Descar;
IF 0 then SET Des nobs=VARNUM;
call symput('nbc',LEFT(put(VARNUM,8.)));
stop;
run;
 
DATA res1;
DELETE;
run;
 
/* ajout de la ligne NMISS*/
 
%do i=1 %TO &nbc;
proc means DATA= nume noprint;
var &&nomv&i;
output out= work.quant&i nmiss=&&nomv&i;
DATA quant&i;
SET quant&i;
DROP _freq_;
RENAME _TYPE_=type;
 
DATA res1;
merge quant&i; 
BY type;
run;
 
%end;
%mend;
 
%test6b(exatraitPS);
mamiche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 19h59   #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
J'imagine que type et la clé de ta table et que tu as une ou plusieurs variables dans chaque table
il faut renommer les variables sinon tu les perds.
il faut faire la boucle à ce niveau.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
%do i=1 TO &nbc;
  DATA quanti&i; SET quanti&i(RENAME=(var=var&i)); run;
  /*var et le nom de la variable dans la table quanti&i, tu peux ajouter les autres*/
%end;
DATA res1;
merge  %do i=1 %TO &nbc;
   quant&i;; end;
 
BY type;
run;
%end;
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 21h11   #3
Nouveau Membre du Club
 
Inscription : mai 2008
Messages : 45
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 45
Points : 32
Points : 32
bonjour Bahraoui,

a mon avis ya un probleme de syntaxe dans le code que tu m'as donné, car il n'arrive pas a lire le by ainsi que le end sans les pourcentages car je suis a l'interieur d'une macro
j'ai essayé de mettre les pourcentages ça n'a quand même pas marché,

tu me dis qu'il faut renommer les variables ? je ne comprends pas pourquoi ? je l'ai quand même fait mais ça n'a rien donné !

en fait le probleme n'est pas la car quand j'essaye de merger les tables une a une en les mettant dans l'instruction merge ça marche très bien ! a mon avis c'est un problème d'indexation, quand il li les tables une par une il les stock pas c'est pour ça qu'il ne garde que la dernière!

essaye de revoir la syntaxe que tu m'as donné peut etre qu'il ya un end qui est mal placé, je ne vois pas aussi pourquoi faire une autre boucle a l'interieur du merge alors que je suis dejà dans la boucle !


merci encore pour ton soutien !
bravo
mamiche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2008, 07h44   #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
Effectivement, le ';' n' estr pas à la bonne position
Code :
1
2
3
4
5
6
7
 
DATA res1;
merge  %do i=1 %TO &nbc;
   quant&i; end;
; 
BY type;
run;
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h26.


 
 
 
 
Partenaires

Hébergement Web