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 :

Sélection nombre d'observations [DATA]


Sujet :

SAS Base

  1. #1
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 11
    Par défaut Sélection nombre d'observations
    Bonjour

    je souhaiterais sélectionner un nombre d'observation selon le nombre de cliente présente dans chaque magasin:
    si le nb de cliente < 1000, on les garde toutes.
    si le nb de cliente>= 1000, on garde seulement 500 clientes.

    ci dessous mon code qui ne fonctionne pas au niveau de la sélection des 500 dans le then output. J'ai un message d'erreur dans ma log qui m'avertit d'une erreur de syntaxe.


    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
     
    %MACRO Macro_mag_SMS(Mag= ,i= );
     
    	Proc sort data=table_cible_sms(where=(Code_Magasin="&Mag.")) out=table_cible_sms_tr;
    		 by descending Segment ;
    	Run;
     
    /***** Ciblage SMS  ****/
    	Data Tab_SMS1_mag ;
    		set table_cible_sms_tr;
     
    		if _N_ < 1000 then output Tab_SMS1_mag;
    		if _N_ >= 1000 then output Tab_SMS1_mag (obs=500) ;
     
    	Run;
    Data Tab_SMS1_mag_cible_&i. Tab_SMS1_mag_temoin_&i.;
    		set Tab_SMS1_mag;
    		if ranuni(123)<0.90 then output Tab_SMS1_mag_cible_&i.;
    		else output Tab_SMS1_mag_temoin_&i.;
    	Run;
    ....
    je pourrais passé par une étape data supplémentaire, mais ma macro va mettre encore beaucoup plus de temps à mouliner.... Je pense qu'il y a une solution, mais avec certains de mes collègues nous n'avons pas trouver la solution... Est-ce que quelqu'un a la clé à ce problème, svp?

    Merci!

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 114
    Par défaut
    Bonjour,

    Je pense qu'il te faudra faire le test avant le l'etape data pour voir quelle table tu vas "OUTPUTER". Tu peux garder le nombre d'observations de la table et ensuite faire l'extraction da la table finale selon le test de ta condition.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    PROC SQL NOPRINT;
    SELECT COUNT(*) INTO : NBR_OBS
    FROM table_cible_sms_tr;
    QUIT;
    %LET NBR_OBS=&NBR_OBS;
    %IF &NBR_OBS>=1000 %THEN DO;
    DATA Tab_SMS1_mag ;
    		SET table_cible_sms_tr(obs=500);
    RUN;
    %ELSE DO;
    DATA Tab_SMS1_mag ;
                     SET table_cible_sms_tr;
    RUN;
    %END;

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 114

  4. #4
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 11
    Par défaut
    Merci de votre réponse je vais tester votre code.
    En attendant, un de mes collègues m'a trouvé une solution ce matin:
    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
    data _null_; set table_cible_sms_tr;
        call symput('nb_ligne',_n_);
    run;
     
    data Tab_SMS1_mag ;
    if &nb_ligne<=1000 then do i=1 to &nb_ligne;
          set table_cible_sms_tr point=i;
          output;
          end;
    else do i=1 to 500;
          set table_cible_sms_tr point=i;
          output;
          end;
    stop;
    run;
    Du coup, mon problème est résolu, merci!

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2003
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 556
    Par défaut
    Un autre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DATA Tab_SMS1_mag;
       SET table_cible_sms_tr nobs=NbrObs;
       IF NbrObs < 1000 THEN output; ELSE IF _N_<500 THEN output;
    RUN;

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

Discussions similaires

  1. Nombre d'observations d'une table
    Par stefsas dans le forum Macro
    Réponses: 4
    Dernier message: 21/04/2011, 16h43
  2. Insérer nombre d'observations dans label
    Par Prisni dans le forum Macro
    Réponses: 5
    Dernier message: 26/03/2009, 09h18
  3. Anova avec nombre d'observation différents
    Par Eco_prince dans le forum MATLAB
    Réponses: 2
    Dernier message: 30/11/2008, 13h31
  4. requete sql sélection nombre impair
    Par The_Pretender dans le forum Requêtes
    Réponses: 4
    Dernier message: 17/10/2008, 14h58
  5. Nombre d'observations disctinctes d'une colonne
    Par bibette dans le forum SAS Base
    Réponses: 1
    Dernier message: 08/07/2008, 16h01

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