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 03/05/2011, 16h12   #1
Invité régulier
 
Inscription : juillet 2008
Messages : 58
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 58
Points : 7
Points : 7
Par défaut Répéter une même opération sur un nombre indéfini de tables

Bonjour,

Voilà mon problème:

Dans mon programme, je crée un nombre assez important de tables (une trentaine).

Ce que je souhaite c'est éxécuter ce code:

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
PROC SQL;
CREATE TABLE sommetable AS SELECT SUM(itodeliver) AS itodeliver, 
								SUM(iprocessed) AS iprocessed, 
								SUM(isuccess) AS isuccess,
								((SUM(isuccess)/SUM(iprocessed))*100) AS successpourcent,
								SUM(irecipientopen) AS irecipientopen,
								((SUM(irecipientopen)/SUM(isuccess))*100) AS ouverturespourcent,
								SUM(itotalrecipientopen) AS itotalrecipientopen,
								SUM(ioptout) AS ioptout,
								((SUM(ioptout)/SUM(isuccess))*100) AS desinscriptionspourcent,
								SUM(ipersonclick) AS ipersonclick,
								((SUM(ipersonclick)/SUM(isuccess))*100) AS clicsdistinctspourcent,
								SUM(itotalrecipientclick) AS itotalrecipientclick,
								((SUM(ipersonclick)/SUM(irecipientopen))*100) AS reactivite,
								SUM(ireject) AS ireject,
								SUM(inewquarantine) AS inewquarantine,
								((SUM(inewquarantine)/SUM(isuccess))*100) AS quarantainepourcent,
								SUM(imirrorpage) AS imirrorpage,
								((SUM(imirrorpage)/SUM(isuccess))*100) AS mirroirpourcent,
								SUM(iforward) AS iforward,
								((SUM(iforward)/SUM(isuccess))*100) AS transfertspourcent
FROM table;
QUIT;
 
 
DATA tableauavecsommetable;
SET table sommetable;
IF sdeliverycode="" then sdeliverycode="Totaux";
run;
pour chacune des tables (la trentaine en question) qui ont été créées auparavant via ce code:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
proc sql noprint; 
SELECT DISTINCT substr(sdeliverycode,1,3)||substr(sdeliverycode,25,5) INTO :listtab separated BY " "
FROM nouveaufichier1;
CREATE TABLE listtab AS
SELECT DISTINCT substr(sdeliverycode,1,3)||substr(sdeliverycode,25,5) AS code
FROM nouveaufichier1;
quit;
 
DATA _null_;
SET listtab;
call symput("code"||compress(put(_n_,3.)), code);
call symput("nbcode",put(_n_,3.));
run;
%macro manageoutput;
DATA &listtab ;
SET nouveaufichier1;
%do i=1 %TO  &nbcode.;
IF substr(sdeliverycode,1,3)||substr(sdeliverycode,25,5)="&&code&i." then output &&code&i.;
%end;
run;
%mend manageoutput;
%manageoutput;
ludo35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 16h34   #2
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Salut,
Qu'est ce que t'as fait de la macro que je t'avais posté? ça ne te convient pas?
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 17h22   #3
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
Bonjour,
je ne suis pas si sûre de ce que tu veux faire. Peut être que je suis à côté de la plaque
Mais j'ai quelques remarques.

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
57
58
59
proc sql noprint; 
*SELECT DISTINCT substr(sdeliverycode,1,3)||substr(sdeliverycode,25,5) INTO :listtab separated BY " "
FROM nouveaufichier1 ---> t'aurai pu le créer en bas avec une concatination mde macro variable dans le call symput;
CREATE TABLE listtab AS
SELECT DISTINCT substr(sdeliverycode,1,3)||substr(sdeliverycode,25,5) AS code
FROM nouveaufichier1;
quit;
%macro manageoutput; 
DATA _null_;
SET listtab;
call symput("code"||compress(put(_n_,3.)), code);
call symput("nbcode",put(_n_,3.));
run;
 
%do i=1 %TO  &nbcode.;
 
*DATA &listtab ;	*---> ici tu écrases la table à chaque fois et tu ne gardes que la dénrière;
DATA listtab&i;  *----> peut être c'est ce que tu voulais faire?;
SET nouveaufichier1;
IF substr(sdeliverycode,1,3)||substr(sdeliverycode,25,5)="&&code&i." then output &&code&i.;
 
run;
 
 
PROC SQL;
CREATE TABLE sommetable&i. AS SELECT SUM(itodeliver) AS itodeliver, 
								SUM(iprocessed) AS iprocessed, 
								SUM(isuccess) AS isuccess,
								((SUM(isuccess)/SUM(iprocessed))*100) AS successpourcent,
								SUM(irecipientopen) AS irecipientopen,
								((SUM(irecipientopen)/SUM(isuccess))*100) AS ouverturespourcent,
								SUM(itotalrecipientopen) AS itotalrecipientopen,
								SUM(ioptout) AS ioptout,
								((SUM(ioptout)/SUM(isuccess))*100) AS desinscriptionspourcent,
								SUM(ipersonclick) AS ipersonclick,
								((SUM(ipersonclick)/SUM(isuccess))*100) AS clicsdistinctspourcent,
								SUM(itotalrecipientclick) AS itotalrecipientclick,
								((SUM(ipersonclick)/SUM(irecipientopen))*100) AS reactivite,
								SUM(ireject) AS ireject,
								SUM(inewquarantine) AS inewquarantine,
								((SUM(inewquarantine)/SUM(isuccess))*100) AS quarantainepourcent,
								SUM(imirrorpage) AS imirrorpage,
								((SUM(imirrorpage)/SUM(isuccess))*100) AS mirroirpourcent,
								SUM(iforward) AS iforward,
								((SUM(iforward)/SUM(isuccess))*100) AS transfertspourcent
/*FROM table; *tu crées une 30aines de tables de la même table source c'est quoi l'intêret? 
				puisqu'il n'y a pas de condition ( filtre? )				 ;*/
FROM  &&tab&i; *??;
QUIT;
 
 
DATA tableauavecsommetable&i;
SET TABLE sommetable&i;
IF sdeliverycode="" then sdeliverycode="Totaux";
run;
 
%end;
%mend manageoutput;
%manageoutput;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 19h03   #4
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Ci-dessous un exemple qui pourrait t'inspirer, il suffit juste de remplacer la macro variable dir (=%let dir=C:\Users\BEARE) par un répertoire existant, une fois que t'es convaincu, tu remplaces la proc sql par la tienne.

ps: la librairie mylib ne doit contenir que tes 30 tables.

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
proc datasets library=mylib KILL force;
quit;
 
%let dir=C:\Users\BEARE ;
 
libname mylib "&dir.";
DATA mylib.table1;
do x=1 TO 23;
do y=1 TO 76;
output;
end;
end;
run;
DATA mylib.table2;
do x=23 TO 43;
do y=11 TO 76;
output;
end;
end;
run;
DATA mylib.table3;
do x=45 TO 89;
do y=87 TO 104;
output;
end;
end;
run;
DATA mylib.table4;
do x=89 TO 123;
do y=78 TO 122;
output;
end;
end;
run;
 
 
DATA fichiersSAS ;
	LENGTH fic $ 100;
	INFILE "&dir.\*.sas7bdat" FILENAME = fic ;
	INPUT ;
	fichier = fic ;
RUN ;
 
PROC SORT DATA=fichiersSAS  nodupkey;
	BY fichier;
RUN;
 
DATA fichiersSAS ;
	ATTRIB nom_fichier FORMAT=$100.;
	SET fichiersSAS ;
	NOM_F=scan(fichier,-1,'\');
	nom_fichier=tranwrd(NOM_F,'.sas7bdat',' ');
RUN;
 
DATA _NULL_;
SET fichiersSAS;
CALL SYMPUT("NB",_N_);
CALL SYMPUT("liste_fichier"!!LEFT(_N_),nom_fichier);
RUN;
%put &liste_fichier1;
 
%MACRO SOMME;
 
%DO i=1 %TO &NB.;
 
PROC SQL;
CREATE TABLE mylib.somme_&&liste_fichier&i. AS SELECT SUM(X) AS sum_x, 
								SUM(Y) AS sum_y
FROM mylib.&&liste_fichier&i.;
QUIT;
 
 
%END;
%MEND;
 
%SOMME;
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 10h06   #5
Invité régulier
 
Inscription : juillet 2008
Messages : 58
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 58
Points : 7
Points : 7
Quand j'essaye ta solution Megamind2, j'obtiens cette erreur:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
275        proc datasets library=mylib KILL force;
WARNING: La biblio. MYLIB n'existe pas.
ERROR: La biblio. MYLIB n'existe pas.
276        quit;
 
NOTE: Instructions non traitées en raison des erreurs signalées ci-dessus.
NOTE: Le Système SAS a interrompu le traitement de cette étape en raison d'erreurs.
NOTE: Procédure DATASETS a utilisé (Durée totale du traitement) :
      temps réel          0.00 secondes
      temps UC            0.00 secondes
 
277        
278        %let dir=T:\NEOLANE\TDB LUDOVIC ;
279        
280        libname mylib "&dir.";
NOTE: La biblio. MYLIB n'existe pas.
Cela vient peut-être du fait que je travaille sur un serveur? Comment régler ce problème?
ludo35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 10h19   #6
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Salut,
Essaie ça, sachant que le répertoire "T:\NEOLANE\TDB LUDOVIC" a été défini au préalable.

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
libname mylib "T:\NEOLANE\TDB LUDOVIC";
 
proc datasets library=mylib KILL force;
quit;
 
DATA mylib.table1;
do x=1 TO 23;
do y=1 TO 76;
output;
end;
end;
run;
DATA mylib.table2;
do x=23 TO 43;
do y=11 TO 76;
output;
end;
end;
run;
DATA mylib.table3;
do x=45 TO 89;
do y=87 TO 104;
output;
end;
end;
run;
DATA mylib.table4;
do x=89 TO 123;
do y=78 TO 122;
output;
end;
end;
run;
 
 
DATA fichiersSAS ;
	LENGTH fic $ 100;
	INFILE "&dir.\*.sas7bdat" FILENAME = fic ;
	INPUT ;
	fichier = fic ;
RUN ;
 
PROC SORT DATA=fichiersSAS  nodupkey;
	BY fichier;
RUN;
 
DATA fichiersSAS ;
	ATTRIB nom_fichier FORMAT=$100.;
	SET fichiersSAS ;
	NOM_F=scan(fichier,-1,'\');
	nom_fichier=tranwrd(NOM_F,'.sas7bdat',' ');
RUN;
 
DATA _NULL_;
SET fichiersSAS;
CALL SYMPUT("NB",_N_);
CALL SYMPUT("liste_fichier"!!LEFT(_N_),nom_fichier);
RUN;
%put &liste_fichier1;
 
%MACRO SOMME;
 
%DO i=1 %TO &NB.;
 
PROC SQL;
CREATE TABLE mylib.somme_&&liste_fichier&i. AS SELECT SUM(X) AS sum_x, 
								SUM(Y) AS sum_y
FROM mylib.&&liste_fichier&i.;
QUIT;
 
 
%END;
%MEND;
 
%SOMME;
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 10h49   #7
Invité régulier
 
Inscription : juillet 2008
Messages : 58
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 58
Points : 7
Points : 7
même problème:

Code :
1
2
3
4
5
6
libname mylib "T:\NEOLANE\TDB LUDOVIC";
NOTE: La biblio. MYLIB n'existe pas.
274        
275        proc datasets library=mylib KILL force;
WARNING: La biblio. MYLIB n'existe pas.
ERROR: La biblio. MYLIB n'existe pas.
ludo35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 11h00   #8
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Es-tu certain que le repertoire existe?
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 11h13   #9
Invité régulier
 
Inscription : juillet 2008
Messages : 58
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 58
Points : 7
Points : 7
Après vérification, oui il existe bien.
ludo35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 11h18   #10
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Citation:
Envoyé par ludo35 Voir le message
Après vérification, oui il existe bien.


Tes 30 tables sont stockées dans la même librairie?
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 11h35   #11
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
Citation:
Envoyé par ludo35 Voir le message
même problème:

Code :
1
2
3
4
5
6
libname mylib "T:\NEOLANE\TDB LUDOVIC";
NOTE: La biblio. MYLIB n'existe pas.
274        
275        proc datasets library=mylib KILL force;
WARNING: La biblio. MYLIB n'existe pas.
ERROR: La biblio. MYLIB n'existe pas.
travailles-tu sur un serveur Unix ? Via SASEG?
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 11h38   #12
Invité régulier
 
Inscription : juillet 2008
Messages : 58
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 58
Points : 7
Points : 7
je travaille sur SASEG oui. Un serveur unix peut-être...Dans ce cas, comment solutionner le problème ?
ludo35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 11h51   #13
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Une alternative serait de compiler cette macro 30 fois.

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
/* tablein=nom de la table que tu veux agréger*/
 
%MACRO SOMME(tablein=);
 
PROC SQL;
CREATE TABLE somme_&tablein. AS 
	SELECT SUM(itodeliver) AS itodeliver, 
	SUM(iprocessed) AS iprocessed, 
	SUM(isuccess) AS isuccess,
	((SUM(isuccess)/SUM(iprocessed))*100) AS successpourcent,
	SUM(irecipientopen) AS irecipientopen,
	((SUM(irecipientopen)/SUM(isuccess))*100) AS ouverturespourcent,
	SUM(itotalrecipientopen) AS itotalrecipientopen,
	SUM(ioptout) AS ioptout,
	((SUM(ioptout)/SUM(isuccess))*100) AS desinscriptionspourcent,
	SUM(ipersonclick) AS ipersonclick,
	((SUM(ipersonclick)/SUM(isuccess))*100) AS clicsdistinctspourcent,
	SUM(itotalrecipientclick) AS itotalrecipientclick,
	((SUM(ipersonclick)/SUM(irecipientopen))*100) AS reactivite,
	SUM(ireject) AS ireject,
	SUM(inewquarantine) AS inewquarantine,
	((SUM(inewquarantine)/SUM(isuccess))*100) AS quarantainepourcent,
	SUM(imirrorpage) AS imirrorpage,
	((SUM(imirrorpage)/SUM(isuccess))*100) AS mirroirpourcent,
	SUM(iforward) AS iforward,
	((SUM(iforward)/SUM(isuccess))*100) AS transfertspourcent
FROM &tablein.;
 
QUIT;
 
DATA table_avec_somme_&tablein.;
SET TABLE somme_&tablein.;
IF sdeliverycode="" then sdeliverycode="Totaux";
run;
 
%MEND SOMME;
 
/* exemple avec deux tables*/
 
%SOMME(table_in=toto);
%SOMME(table_in=tutu);
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 12h05   #14
Invité régulier
 
Inscription : juillet 2008
Messages : 58
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 58
Points : 7
Points : 7
Le problème est que la table de base est évolutive, c'est pour ça que j'ai mis "un nombre indéfini de tables".

Ce code me convient tout à fait puisqu'il ne dépend pas du nombre de tables:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
proc sql noprint; 
SELECT DISTINCT substr(sdeliverycode,1,3)||substr(sdeliverycode,25,5) INTO :listtab separated BY " "
FROM nouveaufichier1;
CREATE TABLE listtab AS
SELECT DISTINCT substr(sdeliverycode,1,3)||substr(sdeliverycode,25,5) AS code
FROM nouveaufichier1;
quit;
 
DATA _null_;
SET listtab;
call symput("code"||compress(put(_n_,3.)), code);
call symput("nbcode",put(_n_,3.));
run;
%macro manageoutput;
DATA &listtab ;
SET nouveaufichier1;
%do i=1 %TO  &nbcode.;
IF substr(sdeliverycode,1,3)||substr(sdeliverycode,25,5)="&&code&i." then output &&code&i.;
%end;
run;
%mend manageoutput;
%manageoutput;
Ma proc sql pour faire la somme (dans chaque table) devrait pouvoir être intégrée au code précédent, non ? mais je n'y parvient pas...
ludo35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 12h16   #15
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
Citation:
Envoyé par ludo35 Voir le message
je travaille sur SASEG oui. Un serveur unix peut-être...Dans ce cas, comment solutionner le problème ?
il y a deux sollutions à mes yeux.
1- si t'as SAS installé en locale, dans SEG choisi comme serveur d'exécution LOCALE( foundation par exemple).
2- transfères tes tables dans Unix et change les chemins Windows par ceux de Unix.
Maintenant pour savoir sur quelle plateforme tu travailes (Unix Windows ou autres).
exécutes ce petit bout de code.

Code :
1
2
3
 
 
%put mon serveur est : &SYSSCP  &SYSSCPL;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 12h33   #16
Invité régulier
 
Inscription : juillet 2008
Messages : 58
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 58
Points : 7
Points : 7
Mon serveur est "WIN NET_SRV"
ludo35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 12h50   #17
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
Bon OK,
il se peut que t'as mal renseigner le chemin d'accès.Je te propose de faire sa :
1-t'ouvres manuellement ta table. c-à-d tu clic dessus et elle s'ouvre avec SAS , le mieux c'est de fermer toute session SAS ouverte de la table .
puis tu fais sa :
Code :
1
2
3
4
 
proc sql;
SELECT path INTO: chemin FROM dictionary.libnames WHERE upcase(libname)="TMP1"; quit ;
%put le chemin est : &chemin.;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 13h50   #18
Invité régulier
 
Inscription : juillet 2008
Messages : 58
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 58
Points : 7
Points : 7
s_a_m, voila ce que ça me donne:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
GOPTIONS ACCESSIBLE;
15         proc sql;
16         SELECT path INTO: chemin FROM dictionary.libnames WHERE upcase(libname)="TMP1";
NOTE: Aucune ligne n'a été sélectionnée.
16       !                                                                                 quit ;
NOTE: Procédure SQL a utilisé (Durée totale du traitement) :
      temps réel          0.00 secondes
      temps UC            0.00 secondes
 
 
17         %put le chemin est : &chemin.;
WARNING: Référence symbolique apparente CHEMIN non traitée.
le chemin est : &chemin.
18         
19         GOPTIONS NOACCESSIBLE;
20         %LET _CLIENTTASKLABEL=;
21         %LET _CLIENTPROJECTPATH=;
22         %LET _CLIENTPROJECTNAME=;
23         %LET _SASPROGRAMFILE=;
24         
25         ;*';*";*/;quit;run;
26         ODS _ALL_ CLOSE;
ludo35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 13h54   #19
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
C'est quoi cette librairie TMP1 Sam?
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 14h03   #20
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
Citation:
Envoyé par MEGAMIND2 Voir le message
C'est quoi cette librairie TMP1 Sam?
Si je me souviens bien, quand on ouvre manuellement une table SAS lui attribue par defaut le nom TMP1 ( pour temporaire?!!), si on ouvre une deuxième table il donne TMP2,... , c'est pour sa que j'ai insisté à ce que toute les sessions SAS soient fermées avant l'ouverture de la table.

sinon ludo35 pour faire plus juste, quand t'ouvres ta table manuellement vas dans l'explorateur et repère le nom du libname que sas a attribué et remplace le TMP1 par celui là, et sa devrai marcher. .

et d'une manière plus générale pour trouver les chemins de tout les libnames, il faut taper dans les vues dictionary.

Code :
1
2
3
4
5
 
proc sql ;
reset noprint;
CREATE TABLE chemin_lib AS SELECT * FROM dictionary.libnames;
quit;
s_a_m 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 10h38.


 
 
 
 
Partenaires

Hébergement Web