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 :

Condition dans PROC DATA


Sujet :

SAS Base

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 34
    Points : 31
    Points
    31
    Par défaut Condition dans PROC DATA
    Bonjour,

    J'ai en fait 2 tables SAS : DATA01 et DATA02.
    Comment faire pour que :
    DATA03 = DATA01 si DATA01 non vide
    DATA03 = DATA02 si DATA01 vide
    Merci d'avance pour votre réponse.

  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 : 47
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Je suppose que "vide" veut dire que la table existe mais n'a aucune observation. Dans ce cas, je te propose d'ouvrir la table DATA01 dans une étape Data avec la fonction OPEN (ce n'est pas un SET, on ne lit rien à l'intérieur), de récupérer le nombre d'observations avec ATTRN (toujours sans lire les observations, comme on pourrait le faire avec une proc Contents) et de fermer la table (fonction CLOSE). Pour que ça marche, il faut que DATA01 existe. Ensuite, il n'y a plus qu'à faire le SET qui va bien en fonction du nombre d'observations ;
    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
     
    /* préparation du jeu de test */
    DATA work.t01 ;
    	SET sashelp.class (OBS=0) ;	/* à changer en OBS=2 pour faire un 2e test */
    RUN ;
    DATA work.t02 ;
    	SET sashelp.class ;
    RUN ;
     
    /* le programme */
    DATA work.t03 ;
    	/* récupération du nb d'obs de T01 */
    	dsid = OPEN("work.t01") ;
    	nb01 = ATTRN(dsid, "NOBS") ;
    	dsid = CLOSE(dsid) ;
    	IF nb01 > 0 THEN SET work.t01 ;
    	ELSE SET work.t02 ;
    RUN ;
    /* avec OBS=0, T01 est vide --> T03 contient T02 ;
       avec OBS=2, T02 n'est pas vide --> T03 contient T01 */
    Une variante si "vide" veut dire "n'existe pas" sera un peu plus compliquée, parce qu'il faudra utiliser un peu de macro-langage. Cela dit, si tu es en version 9, le programme peut être court, à défaut d'être lisible.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DATA work.t03 ;
    	SET 
    	%SYSFUNC(IFC(%SYSFUNC(EXIST(work.t01)), work.t01, work.t02))
    	;
    RUN ;
    Olivier

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 34
    Points : 31
    Points
    31
    Par défaut Condition dans PROC DATA
    Un tout grand merci pour tes solutions !!
    C'est tout simplement parfait.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 04/03/2014, 14h05
  2. PROC SQL dans PROC DATA
    Par tidou95220 dans le forum SAS Base
    Réponses: 5
    Dernier message: 09/03/2013, 08h50
  3. Appel de macro dans proc data avec call execute
    Par Laurent04 dans le forum Macro
    Réponses: 4
    Dernier message: 18/02/2013, 13h45
  4. Fonction MAX dans une data ou proc SQL
    Par Ouvrier11023 dans le forum SAS Base
    Réponses: 2
    Dernier message: 11/06/2012, 10h10
  5. Condition dans une requête
    Par fdloisel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/08/2004, 16h55

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