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

Outils BI Discussion :

[EG] Colonne calculée, nombre aléatoire


Sujet :

Outils BI

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 60
    Points : 49
    Points
    49
    Par défaut [EG] Colonne calculée, nombre aléatoire
    Bonjour,
    Sur une liste de 100 dossiers, je dois en numéroter (en marquer) 10 au hasard dans un colonne calculée.
    Avez-vous une solution ?
    D'avance merci pour votre aide.

  2. #2
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    Hello,
    Regarde du coté de la procédure surveyselect et l'option SAMPSIZE=10 ou l'option N=10 . Il existe des exemples dans les forums SAS.
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 60
    Points : 49
    Points
    49
    Par défaut Merci mais,
    Citation Envoyé par s_a_m Voir le message
    Hello,
    Regarde du coté de la procédure surveyselect et l'option SAMPSIZE=10 ou l'option N=10 . Il existe des exemples dans les forums SAS.

    Merci pour l'info, mais, j'ai oublié de le préciser, je travail sur SAS Guide Enterprise.
    J'ai regardé dans les fontions RANCAU, RANUNI qui fonctionnent bien mais je n'arrive pas à limiter à 10 le nombre de dossiers à annoter.

  4. #4
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut néanmoins,
    tu as dans EG la tâche "Random Sample" ou "Echantillonnage" qui est l'assistant de la proc SurveySelect ; tu y retrouveras les options.

    Pour la Colonne Calculée je ferai un CASE WHEN avec l'éditeur d'expression avancée. il consiste à générer le ranuni et avec un autre JOIN tu fais une somme cumulative puis tu finis la requête avec un HAVING pour filtrer.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    GOPTIONS ACCESSIBLE;
    %_eg_conditional_dropds(WORK.CLASS2);
     
    PROC SQL;
       CREATE TABLE WORK.CLASS2 AS 
       SELECT t1.Name, 
              t1.Sex, 
              t1.Age, 
              t1.Height, 
              t1.Weight, 
              /* choix */
                (case when int(ranuni(10) *100) < 50 then 1
                else 0
                end) AS choix
          FROM SASHELP.CLASS t1
          ORDER BY t1.Name;
    QUIT;
     
    GOPTIONS NOACCESSIBLE;
     
     
    %LET _CLIENTTASKLABEL=;
    %LET _CLIENTPROJECTPATH=;
    %LET _CLIENTPROJECTNAME=;
     
    %LET _CLIENTTASKLABEL='Query Builder1';
    %LET _CLIENTPROJECTPATH='';
    %LET _CLIENTPROJECTNAME='';
     
    GOPTIONS ACCESSIBLE;
    %_eg_conditional_dropds(WORK.QUERY_FOR_CLASS2);
     
    PROC SQL;
       CREATE TABLE WORK.QUERY_FOR_CLASS2 AS 
       SELECT DISTINCT t1.Name, 
              t1.Sex, 
              t1.Age, 
              t1.Height, 
              t1.Weight, 
              t1.choix, 
              /* SUM_of_choix */
                (SUM(t2.choix)) AS SUM_of_choix
          FROM WORK.CLASS2 t1
               INNER JOIN WORK.CLASS2 t2 ON (t1.Name >= t2.Name)
          GROUP BY t1.Name,
                   t1.choix
          HAVING (CALCULATED SUM_of_choix) <= 5;
    QUIT;
     
    GOPTIONS NOACCESSIBLE;
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  5. #5
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 60
    Points : 49
    Points
    49
    Par défaut RANUMI merci
    Super et merci, j'avance.
    Le case when est bien je dois l'adapter à ma requête.
    Dans un premier test je récupère 14 lignes.
    En fait j'ai un nombre de dossiers par mois qui n'est jamais le même.
    J'ai donc fait en amont un monotonic sur les dossiers du mois.
    Ensuite, voici mon case when :

    case
    when Période Entrée =Période analyse and int(ranuni(10) *max(Monotonic )) < 10 then 1
    else 0
    end

    Résultats 14 dossiers

  6. #6
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 60
    Points : 49
    Points
    49
    Par défaut RANUMI suite
    Je viens d'essayer sur un autre fichier avec 25 dossiers et ça ne fonctionne pas

  7. #7
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 60
    Points : 49
    Points
    49
    Par défaut Echantillon aléatoire
    Je viens de trouver dans les outils de SAS GUIDE l'échantillon aléatoire qui répond presque que parfaitement à mes besoins
    Il me reste plus qu'à trouver une solution pour que le filtre sur la période prenne la colonne "Période" de ma requête.

    C'est possible ?




    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
    /* -------------------------------------------------------------------
    	Code généré par une tâche SAS
    
    	Généré le : mercredi 30 juillet 2014 à 13:22:02
    	Par tâche : Echantillon aléatoire
    
    	Données en entrée : SASApp:WORK.SUIVI_2
    	Serveur : SASApp
    	------------------------------------------------------------------- */
    TITLE; FOOTNOTE;
    
    %LET _CLIENTTASKFILTER = 'Période Entrée TINFODSS'n = 201407; (à remplacer par &Période)
    
    PROC SURVEYSELECT DATA=WORK.SUIVI_2( WHERE=('Période Entrée TINFODSS'n = 201407)) (à remplacer par &Période)	OUT=WORK.RANDRandomSampleSUIVI_DES_HUI
    	METHOD=SRS
    	N=10
    	NOPRINT;
    RUN;
    
    QUIT;
    
    %SYMDEL _CLIENTTASKFILTER;

Discussions similaires

  1. Calcul exponentielle de nombre aléatoire!
    Par lsebe2 dans le forum C++
    Réponses: 4
    Dernier message: 15/11/2014, 23h38
  2. Calculer nombre valeurs Null ou vides dans 1 colonne
    Par lolymeupy dans le forum Webi
    Réponses: 13
    Dernier message: 28/07/2014, 11h59
  3. [XL-2010] Calculer nombre dates dans une colonne.
    Par Bloubee dans le forum Excel
    Réponses: 2
    Dernier message: 29/05/2013, 16h56
  4. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/08/2002, 16h30

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