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 STAT Discussion :

Déterminer la fréquence d'une variable


Sujet :

SAS STAT

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 48
    Points : 31
    Points
    31
    Par défaut Déterminer la fréquence d'une variable
    Bonjour à tous,

    Je suis encore confronté à un casse tête depuis un petit moment. Au fait je voudrais connaitre la fréquence d'une variable, c'est à dire si la variable est hebdomadaire mensuelle ou bien encore annuelle. Je m'explique:

    Voici mes données:

    Cnt Mt Dt Nature
    2 10 01/02/2017 VR
    2 12 08/02/2017 VR
    2 5 15/02/2017 VR
    3 6 05/05/2018 VR
    3 7 05/06/2018 VR
    3 5 05/07/2018 VR

    Et j'aimerais obtenir le tableau suivant:

    Cnt Mt Occurence Frequence
    2 27 3 hebdo
    3 18 3 mensuel

    Vous me sauvez encore une fois la vie. Merci d'avance.

  2. #2
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    Décembre 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 198
    Points : 638
    Points
    638
    Par défaut
    Bonjour,

    Voici une possibilité en partant du principe que l'apparition peut être uniquement hebdo ou mensuel et que tu as bien au moins deux observations par contrat.

    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
    Data r;
    Input Cnt Mt Dt :ddmmyy10. Nature $;
    format dt ddmmyy10.;
    Cards;
    2 10 01/02/2017 VR
    2 12 08/02/2017 VR
    2 5 15/02/2017 VR
    3 6 05/05/2018 VR
    3 7 05/06/2018 VR
    3 5 05/07/2018 VR
    ;Run;
     
    Proc sort data = r;
    by cnt dt;
    Run;
     
    Proc format;
    Value Occ 1 = "Hebdo"
    		  4 = "Mensu";
    Run;
     
    Data rr (drop= mt nature dt last_dt);
    set r;
    By cnt dt;
    Retain Montant occurence time;
    LAST_DT = Lag(DT);
    If first.cnt then do;
    	occurence = 1;
    	Montant = mt;
    End;
    Else do;
    	Occurence + 1;
    	Montant + mt;
    	Time = Put(INTCK("Week",LAST_DT,dt),occ.);
    End;
    If last.cnt;
    Run;
    La fonction Lag permet de retenir la valeur d'une variable sur l'observation n-1 (dans cet exemple).
    La fonction INTCK permet de calculer le nombre de semaines entre deux dates, si on est à 1 alors on retourne "Hebdo" avec la fonction Put, sinon on retourne "Mensu".
    On en profite pour calculer les montants totaux et les occurrences via des retain.

    Flo00154

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 48
    Points : 31
    Points
    31
    Par défaut
    Franchement l'idée de ce site est absolument génial. Merci developpez.net
    Actuellement je ne suis pas devant mon ordi je mis mets des que je suis chez moi, ainsi je verrai le résultat.
    Merci d'avance.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 482
    Points : 1 547
    Points
    1 547
    Par défaut
    Si la table est triée au préalable ce code répond également à ta requête.

    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
    Data Tatable ;
    input Cnt Mt date :ddmmyy10. Nature $;
    format date ddmmyy10.;
    cards;
    2 10  01/02/2017 VR
    2 12  08/02/2017 VR
    2 5   15/02/2017 VR
    3 6   31/05/2018 VR
    3 7   30/06/2018 VR
    3 5   31/07/2018 VR
    ; run ;  	
    
    data Resultat (keep=Cnt S_Mt N Frequence) ;
    S_Mt=0 ;  N=0 ;
    do until(last.Cnt);
    set Tatable ;  
    by Cnt notsorted ;	
    S_Mt+Mt ; N+1 ;
    
    if N=1 then Temp=Date ; 
    else Diff= intck('Month', Temp, Date);
    Frequence=ifc( Diff > 0, 'Mensuel', 'Hebdo' ) ;  
    end ;  
    run  ;
    Ward

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 48
    Points : 31
    Points
    31
    Par défaut
    Bonjour à tous j'ai créé autre que cette discussion une autre appelée "Somme sur une variable avec des conditions". Mon but final était de réunir les réponses des 2 discussions afin de pouvoir obtenir le résultat que j'attendais.

    Ayant comme tableau de base:

    cnt dt mois Montant1 Montant2 Reseau Nature
    1 01/02/2017 2 300 100 AG VL
    1 01/05/2017 5 200 50 AG VL
    1 27/12/2017 12 100 50 AG VL
    2 01/02/2018 2 50 10 AT VR
    2 08/02/2018 2 50 10 AT VR
    2 15/02/2018 2 50 10 AT VR
    3 05/05/2017 5 100 20 AG VR
    3 05/06/2017 5 100 20 AG VR
    3 05/07/2017 7 100 20 AG VR
    4 25/09/2017 9 100 20 AG VS

    J'aimerais obtenir le tableau final suivant:
    cnt Montant1 Montant2 Occurence Frequence Q1 Q2 Q3 Q4 Reseau
    1 600 200 3 0 300 200 0 100 AG
    2 150 30 3 hebdo 0 0 0 0 AT
    3 300 60 3 mensuel 0 0 0 0 AG
    4 100 20 1 0 0 0 0 0 AG

    Je vous avais demandé dans nos discussions précédentes comment obtenir les tableaux pour les variables VL et VR. Les codes marchaient très bien. Cependant quand je veux cumuler les 2 codes que vous m'aviez fournir pour obtenir mon tableau final je n'obtiens pas de bons résultats. Je pense que mon erreur provient de la syntaxe de mon code. Pourriez vous s'ils vous plait voir ce qui ne va pas? Voici mon code.
    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
     
    Proc format;
    invalue QT 1,2,3 = 1
    		   4,5,6 = 2
    		   7,8,9 = 3
    		   10,11,12 = 4;
    Run;
     
    Proc format;
    Value freq 1 = "Hebdo"
    		   4 = "Mensu"
              52 = "An";
    Run;
     
     
    Proc sort data = VL_SUPP; *VL_SUPP est mon tableau initial
    by CNT DT;
    Run;
     
     
    Data VL_Q (drop = dt Mois);
    set VL_SUPP;
    By CNT DT;
    Array Q{4};
    Retain mt occurence time;
    LAST_DT = Lag(DT);
    If first.cnt then do;
        Q{*} = 0;
        Q{input(Mois,QT.)} + Montant1;
    	occurence = 1;
    	mt = Montant1;
    End;
    Else do;
    	Occurence + 1;
    	mt + Montant1;
    	Time = Put(INTCK("Week",LAST_DT,DT),freq.);
    End;
    If last.cnt;
    Run;

  6. #6
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    Décembre 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 198
    Points : 638
    Points
    638
    Par défaut
    Bonjour,

    Tu peux essayer ceci :

    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
    Data r;
    Input cnt dt :ddmmyy10. mois Montant1 Montant2 (Reseau Nature) ($) ;
    Cards;
    1 01/02/2017 2 300 100 AG VL 
    1 01/05/2017 5 200 50 AG VL 
    1 27/12/2017 12 100 50 AG VL 
    2 01/02/2018 2 50 10 AT VR 
    2 08/02/2018 2 50 10 AT VR 
    2 15/02/2018 2 50 10 AT VR 
    3 05/05/2017 5 100 20 AG VR 
    3 05/06/2017 5 100 20 AG VR 
    3 05/07/2017 7 100 20 AG VR 
    4 25/09/2017 9 100 20 AG VS 
    ;Run;
     
    Proc SQL;
    Create table r_s as
    Select *, QTR(Dt) as Tr
    from r
    Order by cnt;
    Quit;
     
    Data rr (keep = cnt Q: occurence time reseau tot:);
    Set r_s;
    by cnt;
    LAST_DT = Lag(DT);
    Array Q{4};
    Array mt{*} montant1 montant2;
    If first.cnt then do;
    	call missing(of Q{*},tot_montant1, tot_montant2);
    	occurence = 1;
    End;
    Else do;
    	Occurence + 1;
    	Time = Put(INTCK("Week",LAST_DT,dt),occ.);
    End;
    	Q{Tr} + montant1;
    	Tot_Montant1 + mt{1};
    	Tot_Montant2 + mt{2};
    If last.cnt;
    Run;
    Flo00154

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 48
    Points : 31
    Points
    31
    Par défaut
    Le nouveau code répond aussi à mes attentes mais c'est juste qu'il manque la variable fréquence qui me donnais si le fréquence est hebdomadaire mensuelle ou même annuelle. Comment peut-on la variable fréquence?

  8. #8
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    Décembre 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 198
    Points : 638
    Points
    638
    Par défaut
    La variable fréquence y est mais elle s'appelle "Time", je ne l'ai pas rename.

    Flo00154

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 48
    Points : 31
    Points
    31
    Par défaut
    Merci beaucoup pour votre aide. J'obtiens bien le résultat escompté.

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

Discussions similaires

  1. Déterminer la fréquence d'une variable
    Par vicjohns dans le forum R
    Réponses: 2
    Dernier message: 04/05/2018, 11h55
  2. [PowerShell] déterminer le type d'une variable puis création de logs
    Par laurentSc dans le forum Scripts/Batch
    Réponses: 12
    Dernier message: 25/04/2017, 16h27
  3. Déterminer la fréquence d'une séquence
    Par quaife dans le forum Administration
    Réponses: 20
    Dernier message: 12/01/2015, 16h02
  4. Fréquence d'une variable
    Par boxine dans le forum SAS Base
    Réponses: 4
    Dernier message: 15/02/2013, 15h49
  5. Réponses: 4
    Dernier message: 13/05/2006, 11h18

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