IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS Base Discussion :

Répéter une même opération sur un nombre indéfini de tables


Sujet :

SAS Base

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Points : 30
    Points
    30
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

  2. #2
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Salut,
    Qu'est ce que t'as fait de la macro que je t'avais posté? ça ne te convient pas?

  3. #3
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

  4. #4
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    Quand j'essaye ta solution Megamind2, j'obtiens cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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?

  6. #6
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    même problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  8. #8
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Es-tu certain que le repertoire existe?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    Après vérification, oui il existe bien.

  10. #10
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    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?

  11. #11
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    Citation Envoyé par ludo35 Voir le message
    même problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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?

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    je travaille sur SASEG oui. Un serveur unix peut-être...Dans ce cas, comment solutionner le problème ?

  13. #13
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Une alternative serait de compiler cette macro 30 fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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);

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  15. #15
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    %put mon serveur est : &SYSSCP  &SYSSCPL;

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    Mon serveur est "WIN NET_SRV"

  17. #17
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    proc sql;
    select path into: chemin from dictionary.libnames where upcase(libname)="TMP1"; quit ;
    %put le chemin est : &chemin.;

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    s_a_m, voila ce que ça me donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

  19. #19
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    C'est quoi cette librairie TMP1 Sam?

  20. #20
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    proc sql ;
    reset noprint;
    create table chemin_lib as select * from dictionary.libnames;
    quit;

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [DATA] Répéter une même opération sur plusieurs variables
    Par Elsa.b dans le forum SAS Base
    Réponses: 5
    Dernier message: 16/06/2015, 14h41
  2. [DEBUTANT] Changer une même ligne sur la console
    Par mr_samurai dans le forum Débuter
    Réponses: 7
    Dernier message: 20/12/2007, 15h07
  3. [Pygame]Supprimer/masquer les pixels d'une même couleur sur une image
    Par Mysti¢ dans le forum Programmation multimédia/Jeux
    Réponses: 2
    Dernier message: 10/05/2007, 13h40
  4. Plusieurs version d'une même App sur un même serveur
    Par Jeweller dans le forum XMLRAD
    Réponses: 27
    Dernier message: 14/02/2006, 11h33
  5. [Font] utiliser une même police sur Windows et sur Linux ?
    Par iubito dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 10/05/2005, 16h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo