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

  1. #1
    Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    février 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2020
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Créer de nouvelles observations par addition d'autres observations
    Bonjour à tous,
    je tente désespérément de bricoler sur SAS depuis quelques temps et vous remercie pour votre indulgence si la solution à la question que je vais poser est "toute bête".
    Je dispose d'une table avec des observations qui sont caractérisées par une variable nom et une variable prénom. J'aimerais sommer les autres variables (var1, var2, var3) autour du nom, indépendamment du prénom.
    J'ai un peu de mal à l'expliquer... La table ressemble à ça :

    Nom Prénom var1 var2 var3
    Titi Truc 1 10 2
    Toto Muche 3 5 7
    Titi Bidule 8 4 6
    Tata Machin 1 2 1
    Toto Chose 7 3 2

    A ceci près qu'elle contient près de 90 000 observations et que je ne sais pas combien de "familles" (noms différents) s'y trouvent ni combien de membres (prénoms) contient chaque famille (nombre différent d'une famille à l'autre).

    Et je voudrais obtenir avoir une nouvelle table qui somme var1, var2 et var3 autour des noms. Elle ressemblerait donc à ça :

    Nom var1 var2 var3
    Titi 9 (8+1) 14 (10+4) 8 (6+2)
    Toto 10 8 9
    Tata 1 2 1

    Quelqu'un peut-il me venir en aide ? Je vous en serais très reconnaissant.
    Bonne soirée!

  2. #2
    Membre éprouvé
    Inscrit en
    novembre 2009
    Messages
    539
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 539
    Points : 1 054
    Points
    1 054
    Par défaut proc univariate
    Bonjour,

    La proc univariate est tout appropriée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    data base;
      input nom :$4. prenom :$6. var1 var2 var3 :8.;
      cards;
    Titi 	Truc 	1 	10 	2
    Toto 	Muche 	3 	5 	7
    Titi 	Bidule 	8 	4 	6
    Tata 	Machin 	1 	2 	1
    Toto 	Chose 	7 	3 	2
    ;
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    proc sort data=base;
      by nom;
    run;
     
    proc univariate data=base noprint;
      by nom;
      var var1-var3;
      output out=somme sum=var1-var3;
    run;
    Cordialement,

  3. #3
    Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    février 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2020
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup, je teste ce code dès demain !
    Bon dimanche.

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Formatrice en SAS (en ligne)
    Inscrit en
    mai 2019
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Formatrice en SAS (en ligne)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : mai 2019
    Messages : 18
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Vous pouvez le faire dans une étape data. Cela ressemble à un exercice d'école où on attend de vous de montrer votre compréhension des notions fondamentales de by, first/last, retain, output.

    Cordialement,
    Véronique

  5. #5
    Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    février 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2020
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour et merci pour vos réponses.

    @bourcier_xxformat, ce n'est pas un exercice scolaire mais je suis obligé (par des contraintes techniques) de travailler sous SAS alors que j'ai davantage l'habitude de R qui n'est pas et qui ne peut pas être installé sur les postes que j'utilise.

    mgdondon, merci ça fonctionne très bien.

    Bonne continuation !

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Formatrice en SAS (en ligne)
    Inscrit en
    mai 2019
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Formatrice en SAS (en ligne)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : mai 2019
    Messages : 18
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par JEREMY141980 Voir le message
    Bonjour et merci pour vos réponses.

    @bourcier_xxformat, ce n'est pas un exercice scolaire mais je suis obligé (par des contraintes techniques) de travailler sous SAS alors que j'ai davantage l'habitude de R qui n'est pas et qui ne peut pas être installé sur les postes que j'utilise.

    mgdondon, merci ça fonctionne très bien.

    Bonne continuation !
    Je comprends tout à fait la difficulté de transiter de R vers SAS ou l'inverse d'ailleurs, l'approche étant très différente.

    Voici comment la solution version étape data qui vous permettra de découvrir un des trois choses essentielles à maîtriser en SAS et qui donc pourra vous être utile une prochaine 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
     
    proc sort data=base;
        by nom;
    run;
     
    data base (drop=_var:);
        set base (rename=(var1=_var1 var2=_var2 var3=_var3));
        by nom;
        if first.nom then 
            do;
               var1=_var1;
               var2=_var2;
               var3=_var3;
            end;
        else 
        	do;
        	   var1+_var1;
               var2+_var2;
               var3+_var3;
            end;
        if last.nom then output;
    run;
    Si vous avez besoin de respecter le tri d'origine des noms, il faudra en outre ajouter une variable contenant le numéro de l'observation avec le tri pour pouvoir les retrier à la fin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    data base;
        set base;
        _n=_n_;
    run;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/08/2013, 11h43
  2. Créer un nouvel identifiant par concaténation
    Par kobeddl dans le forum Langage SQL
    Réponses: 19
    Dernier message: 13/06/2012, 17h30
  3. Mise à jour d'une nouvelle table par rapport à deux autres existantes
    Par drake56 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/07/2011, 18h13
  4. Réponses: 5
    Dernier message: 09/09/2007, 17h40
  5. Réponses: 6
    Dernier message: 27/08/2006, 19h57

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