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 :

Création tranche avec boucle


Sujet :

SAS Base

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    SAS automation
    Inscrit en
    Juin 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : SAS automation
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2011
    Messages : 87
    Par défaut Création tranche avec boucle
    Bonjour,

    j'ai une petite question pour vous, cela fait quelques heures que je galère à créer mes tranches via SAS.

    je m'explique j'ai une table qui fait environ 120 000 lignes avec dedans deux colonnes la première un flag et la deuxième une série de valeur numérique

    exemple
    NA 0
    P 5.053
    M 6.025
    G 8.035

    J'aurais aimer mettre les valeurs numérique en tranche de pas de 1, mais le soucis c'est que j'ai des valeurs comprises entre 0 et 386.

    J'ai donc besoin de votre aide pour écrire quelques choses d'efficace et rapide?

    Merci d'avance

  2. #2
    Membre Expert
    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
    Par défaut
    On peut voir ce que tu as commencé?

  3. #3
    Membre confirmé
    Homme Profil pro
    SAS automation
    Inscrit en
    Juin 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : SAS automation
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2011
    Messages : 87
    Par défaut
    Pour l'instant j'avais commencer la méthode barbare :

    If 0<=PM<1 then tranche = 'entre 0 et 1';
    else if 1<=PM<2 then tranche = 'entre 1 et 2'; et ainsi de suite.

    Je voulais passer par une boucle mais je bloque à ce niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    data tranche_de_panier;
    	set panier_boucherie;
    	format tranche = $20.;
    	do i=&min. to &max.;
            if i<=PM<i+1 then tranche(i)

  4. #4
    Membre Expert
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Par défaut
    J'aurais aimer mettre les valeurs numérique en tranche de pas de 1, mais le soucis c'est que j'ai des valeurs comprises entre 0 et 386.
    tu peux expliquer?

  5. #5
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Par défaut
    Bonjour.
    La boucle est une bonne idée, mais plutôt pour créer un format. Ensuite, tu appliques ton format de manière légère (instruction FORMAT, la variable garde sa vraie valeur stockée) ou en créant une nouvelle variable texte (fonction PUT).
    Pour créer ton format, il faut une étape DATA qui génère les variables suivantes : FMTNAME, TYPE, START, END et LABEL. Plus EEXCL pour indiquer l'ouverture à droite de l'intervalle.
    La table ainsi créée est mise en entrée de la proc Format via l'option CNTLIN.
    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
    DATA work.format ;
      fmtname="tranche" ; /* nom du format */
      type="N" ; /* format numérique */
      DO i=0 TO 386 ;
        start=i ; /* borne inf */
    	end=i+1 ; /* borne sup */
    	eexcl="Y" ; /* intervalle ouvert à droite : [i;i+1[ */
    	label=COMPBL(CAT("entre ",start," et ",end)) ; /* valeur rendue par le format */
    	OUTPUT ;
      END ;
    RUN ;
    PROC FORMAT CNTLIN=work.format ;
    RUN ;
    DATA work.test ; /* jeu d'essai */
      DO i=1 TO 50 ;
        x = ROUND(RANUNI(1)*386) ;
    	tranche = PUT(x,tranche.) ; /* crée une variable texte avec les tranches */
        OUTPUT ;
      END ;
    RUN ;
    Bon courage.
    Olivier

  6. #6
    Membre confirmé
    Homme Profil pro
    SAS automation
    Inscrit en
    Juin 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : SAS automation
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2011
    Messages : 87
    Par défaut
    Merci pour l'astuce cela marche nickel.
    Grâce à cela je viens de gagner beaucoup de temps et d'énergie.

  7. #7
    Membre Expert
    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
    Par défaut
    Sans utiliser une boucle

    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
    data test;
    input id$ var;
    cards;
    NA 0
    P 5.053
    M 6.025
    G 8.035
    ;
    run;
     
    proc sort data=test;
    by var;run;
     
     
    data test2;
    set test;
    sup=int(var);
    if sup ne 0 then do;
    inf=sup-1;
    end;
    if sup=0 then inf=0;
    inf2=put(inf,best.);
    sup2=put(sup,best.);
    tranche="Entre"!!inf2!!' et '!!sup2;
    drop inf sup;
    run;

  8. #8
    Membre confirmé
    Homme Profil pro
    SAS automation
    Inscrit en
    Juin 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : SAS automation
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2011
    Messages : 87
    Par défaut
    merci pour la deuxième solution, je viens de la tester elle marche nickel je me suis juste permis de rajouter l'option COMPBL au niveau de la définition de la tranche.

    Encore Merci

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

Discussions similaires

  1. Vérification de dossiers, si non présents création avec boucle
    Par PAB/31/SAB dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 29/04/2015, 11h20
  2. pb requete avec boucle
    Par kidu dans le forum Requêtes
    Réponses: 1
    Dernier message: 31/08/2005, 14h27
  3. Réponses: 10
    Dernier message: 05/04/2005, 10h25
  4. Création étiquettes avec signets dans Word
    Par rohstev dans le forum VBA Word
    Réponses: 2
    Dernier message: 18/03/2005, 13h14
  5. Création vue avec test d'existence
    Par yan77 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/12/2004, 11h44

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