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 :

Suppression d'observations jusqu'à l'atteinte d'une certaine valeur


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Points : 18
    Points
    18
    Par défaut Suppression d'observations jusqu'à l'atteinte d'une certaine valeur
    Bonjour à tous,

    J'ai un problème qui, à première vue, semble facile, mais auquel je ne trouve pas de solution. Le voici :

    Je voudrais un code qui enlève les premières observations d'une variable jusqu'au moment où elle atteigne une certaine valeur (15 dans mon cas). Pour illustrer plus clairement la problématique, voici un exemple simplifié (la base de données contient des milliers d'observations avec des centaines de CRSP_fundno) :

    CRSP_fundno TNA

    1 10
    1 15
    1 20
    2 8
    2 7
    2 17.5
    2 18
    2 6
    2 0.5

    output désiré

    CRSP_fundno TNA

    1 15
    1 20
    2 17.5
    2 18
    2 6
    2 0.5

    Quand le TNA franchit la barre des 15, toutes les observations sont conservées même si celles-ci tombent ensuite en dessous de la valeur cible (le cas du CRSP_fundno=2)

    j'ai tenté des codes avec RETAIN et des boucles avec DO UNTIL , mais en vain.

    Merci de votre aide et du temps qui sera consacré !

  2. #2
    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 : 46
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 476
    Points
    4 476
    Par défaut
    Bonjour.
    RETAIN était une bonne pioche pourtant. On crée une variable initialisée à 0, protégée par un RETAIN, et qu'on passe à 1 quand on rencontre une valeur >= 15.
    Et sur la table en sortie on n'écrit que les observations avec la valeur 1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DATA sortie ;
      SET entree ;
      BY  CRSP_fundno ; /* trier au préalable */
      RETAIN top_out ;
      IF FIRST.CRSP_fundno THEN top_out=0 ;
      IF TNA >= 15 THEN top_out = 1 ;
      IF top_out=1 THEN OUTPUT ;
    RUN ;
    Bon courage.
    Olivier
    Bon courage.
    Olivier

  3. #3
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Merci Olivier ! Mon erreur, c'est que je n'ai pas protégé la variable initialisée à 0.

    Merci encore, cela m'aide beaucoup.

    Bonne fin de journée.

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

Discussions similaires

  1. Fonction sélectionnant jusqu'à une certaine valeur
    Par maxicobra dans le forum Excel
    Réponses: 14
    Dernier message: 23/05/2013, 10h11
  2. [Xpath] match="*" si l'attribut d'un parent matche une certaine valeur
    Par Luc Hermitte dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/10/2008, 12h39
  3. Réponses: 13
    Dernier message: 06/08/2008, 15h36
  4. Réponses: 1
    Dernier message: 14/05/2007, 15h41
  5. Réponses: 2
    Dernier message: 27/03/2007, 23h15

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