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 :

création de table avec boucle "if then do" sous SAS


Sujet :

SAS STAT

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2021
    Messages : 4
    Points : 6
    Points
    6
    Par défaut création de table avec boucle "if then do" sous SAS
    Bonjour à tous,

    je viens de débuter sur SAS et je fais face à un problème de boucle dans la création de ma table. J'obtiens une table vide avec juste le nom des colonnes. Je n'ai que la variable id qui a des valeurs de 1 à 40000. J'aimerais qu'on puisse m'indiquer ou est ce que je commet l'erreur dans la saisie ou la raison pour laquelle je n'ai pas d'enregistrement dans la table.


    mon code est le suivant:

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    proc format;
            value f_bin
                    0 = "Sans"
                    1 = "Avec"
                    ;
    run;
     
    data one1;
            do id = 1 to 40000;
                    if id <= 200 and id > 30000 then
                            do;
                                    sex = "M";
                                    if ranuni(684) > 0.36 then
                                            sex = "F";
                                    age = (rannor(3416487) + 42);
                                    a = rannor(34487);
                                    if ranuni(68444) > 0.86 then
                                            a = 999999;
                                    b = rannor(34587);
                                    if ranuni(6854) > 0.86 then
                                            b = 999999;
                                    c = rannor(458);
                                    if ranuni(68444) > 0.86 then
                                            c = 999999;
                                    d = rannor(254);
                                    if ranuni(64484) > 0.86 then
                                            d = 999999;
                                    e = rannor(125);
                                    if ranuni(68144) > 0.86 then
                                            e = 999999;
                                    f = rannor(15);
                                    if ranuni(62584) > 0.86 then
                                            f = 999999;
                                    g = put(ranbin(86387, 1, 0.2), f_bin.);
                                    if ranuni(684) > 0.86 then
                                            g = "DM";
                                    h = put(ranbin(44387, 1, 0.2), f_bin.);
                                    if ranuni(68594) > 0.86 then 
                                            h = "DM";
                                    i = put(ranbin(44387, 1, 0.2), f_bin.);
                                    if ranuni(6596844) > 0.86 then
                                            i = "DM";
                                    j = put(ranbin(4387, 1, 0.2), f_bin.);
                                    if ranuni(654525294) > 0.86 then
                                            j = "DM";
                                    k = put(ranbin(3487, 1, 0.2), f_bin.);
                                    if ranuni(46594) > 0.86 then
                                            k = "DM";
                                    l = put(ranbin(355487, 1, 0.2), f_bin.);
                                    if ranuni(26594) > 0.86 then 
                                            l = "DM";
                                    m = put(ranbin(34487, 1, 0.2), f_bin.);
                                    if ranuni(16594) > 0.86 then
                                            m = "DM";
                                    n = put(ranbin(345587, 1, 0.2), f_bin.);
                                    if ranuni(86594) > 0.86 then
                                            n = "DM";
                                    o = put(ranbin(55587, 1, 0.2), f_bin.);
                                    if ranuni(96594) > 0.86 then
                                            o = "DM";
                                    p = put(ranbin(3552587, 1, 0.2), f_bin.);
                                    if ranuni(866594) > 0.86 then
                                            p = "DM";
                                    flag_pop = (ranuni(6854) > 0.85);
                                    output;
                            end;
            output;
            end;
    run;
    Merci à tous ceux qui pourrons me venir en aide.

  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 478
    Points
    4 478
    Par défaut
    Bonjour Kevin.
    Il y a deux petits soucis dans ce code.
    1) une des deux instructions OUTPUT est en trop. Soit tu veux vraiment 40 000 observations en sortie et il faut garder le OUTPUT situé entre les deux END (et ajouter un ELSE pour indiquer comment remplir les lignes entre la 2 000e et la 30 000e), soit tu ne veux que 12 000 lignes et il faut garder le OUTPUT avant les deux END.
    2) la condition du IF ne peut jamais être vraie, ID ne peut pas être à la fois < 2000 et > 30000. C'est un OR qu'il faut, pas un AND.
    Bon courage.
    Olivier

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2021
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    Bonjour olivier.decourt,

    je vous remercie pour votre intervention j'ai compris d’où venait mon erreur et je l'ai corrigé.

    Merci encore à vous.

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

Discussions similaires

  1. Création des tables avec les jointures.
    Par alexandrebergercyr dans le forum Langage SQL
    Réponses: 6
    Dernier message: 06/03/2007, 15h25
  2. Création de table avec Null par defaut
    Par MaitrePylos dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 15/02/2006, 09h20
  3. Création de tables avec postgresql
    Par angiosfr dans le forum JDBC
    Réponses: 6
    Dernier message: 28/09/2005, 20h43
  4. Création de table avec index
    Par Seb7 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/04/2003, 16h11

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