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 :

Engendrer les variables indicatrices d’une variable discrète


Sujet :

SAS STAT

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 3
    Points : 9
    Points
    9
    Par défaut Engendrer les variables indicatrices d’une variable discrète
    Bonsoir,

    Avant tout, je tiens à m'excuser si je n'ai pas poster ma discussion au bon endroit.

    je viens ici afin de solliciter votre aide sur un exercice de SAS sur lequel je m'exerce. Malheureusement, il n'y a point de solution pour l'exercice et j'aimerais bien que l'on m'éclaire. J'ai eu quelques cours de SAS l'année dernière en licence d'économie. Je suis actuellement en M1 et je m’entraîne en vue d'un partiel.

    L'énnoncé de mon exercice est le suivant :
    Nom : 2.PNG
Affichages : 3257
Taille : 43,6 Ko
    Nom : 1.PNG
Affichages : 3251
Taille : 20,0 Ko

    Voilà ce que je pensais faire :

    DATA Matable ;
    INPUT id score ;
    DATALINES ;
    1 +
    2 =
    3 -
    4 =
    5 --
    6 +
    7 ++
    ;

    DATA score (keep = id score v1 v2 v3 v4 v5 v6 v7 v8 v9 v10) ;
    SET Matable;
    IF scores EQ "+" THEN v1 = 1 ; ELSE v2 = 0 ; ELSE v3 = 0 ; ELSE v4 = 0 ; ELSE v5 = 0 ;
    ELSE IF scores EQ "=" THEN v2 = 1 ; ELSE v1 = 0 ; ELSE v3 = 0 ; ELSE v4 = 0 ; ELSE v5 = 0 ;
    ELSE IF scores EQ "-" THEN v3 = 1 ; ELSE v1 = 0 ; ELSE v2= 0 ; ELSE v4 = 0 ; ELSE v5 = 0 ;
    ELSE IF scores EQ "--" THEN v4 = 1 ; ELSE v1 = 0 ; ELSE v2 = 0 ; ELSE v3 = 0 ; ELSE v5 = 0 ;
    ELSE IF scores EQ "+=" THEN v5 = 1 ; ELSE v1 = 0 ; ELSE v2 = 0 ; ELSE v3 = 0 ; ELSE v4 = 0 ;
    RUN ;



    Merci d'avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    Citation Envoyé par SASM1 Voir le message
    Bonsoir,

    Avant tout, je tiens à m'excuser si je n'ai pas poster ma discussion au bon endroit.

    je viens ici afin de solliciter votre aide sur un exercice de SAS sur lequel je m'exerce. Malheureusement, il n'y a point de solution pour l'exercice et j'aimerais bien que l'on m'éclaire. J'ai eu quelques cours de SAS l'année dernière en licence d'économie. Je suis actuellement en M1 et je m’entraîne en vue d'un partiel.

    L'énnoncé de mon exercice est le suivant :
    Nom : 2.PNG
Affichages : 3257
Taille : 43,6 Ko
    Nom : 1.PNG
Affichages : 3251
Taille : 20,0 Ko

    Voilà ce que je pensais faire :

    DATA Matable ;
    INPUT id score ;
    DATALINES ;
    1 +
    2 =
    3 -
    4 =
    5 --
    6 +
    7 ++
    ;

    DATA score (keep = id score v1 v2 v3 v4 v5 v6 v7 v8 v9 v10) ;
    SET Matable;
    IF scores EQ "+" THEN v1 = 1 ; ELSE v2 = 0 ; ELSE v3 = 0 ; ELSE v4 = 0 ; ELSE v5 = 0 ;
    ELSE IF scores EQ "=" THEN v2 = 1 ; ELSE v1 = 0 ; ELSE v3 = 0 ; ELSE v4 = 0 ; ELSE v5 = 0 ;
    ELSE IF scores EQ "-" THEN v3 = 1 ; ELSE v1 = 0 ; ELSE v2= 0 ; ELSE v4 = 0 ; ELSE v5 = 0 ;
    ELSE IF scores EQ "--" THEN v4 = 1 ; ELSE v1 = 0 ; ELSE v2 = 0 ; ELSE v3 = 0 ; ELSE v5 = 0 ;
    ELSE IF scores EQ "+=" THEN v5 = 1 ; ELSE v1 = 0 ; ELSE v2 = 0 ; ELSE v3 = 0 ; ELSE v4 = 0 ;
    RUN ;



    Merci d'avance
    Bonjour,

    tu souhaite créer des indicatrices, il faut donc tout simplement créer des indicatrices

    DATA score (keep = id score v1 v2 v3 v4 v5 v6 v7 v8 v9 v10) ;
    SET Matable;
    V1=(scores="+");
    V2=(scores="=");
    V3=(score="-");
    etc...

    ....

    RUN ;
    Je crois que c'est à peu près tout.

    Bonnes fêtes à toi.
    Cordialement

  3. #3
    Membre éprouvé
    Avatar de Haache
    Homme Profil pro
    Doctorant & Ingénieur Statiaticien Economiste
    Inscrit en
    Mars 2014
    Messages
    349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations professionnelles :
    Activité : Doctorant & Ingénieur Statiaticien Economiste

    Informations forums :
    Inscription : Mars 2014
    Messages : 349
    Points : 1 009
    Points
    1 009
    Billets dans le blog
    8
    Par défaut
    Bonjour
    SI je comprends bien, tu veux faire un tableau disjonctif complet (TDC)
    J'avais proposé une macro ici,
    http://www.developpez.net/forums/blo...tdc-macro-sas/
    Il suffit de compiler le code et avoir la macro. Chaque fois que tu voudra faire un TDC, tu écriras juste une ligne.

    Une autre solution est d'utiliser la PROC transreg
    • Faites un tour sur mon siteweb professionnel www.aristideelysee.16mb.com Des codes dans la section "media et code" pouvant vous aider que vous pouvez aussi partager sur les réseaux sociaux.
    • Visiter mon blog en cliquant ici! Des techniques, astuces et macros pour l'analyse quantitative.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 3
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Haache Voir le message
    Bonjour
    SI je comprends bien, tu veux faire un tableau disjonctif complet (TDC)
    J'avais proposé une macro ici,
    http://www.developpez.net/forums/blo...tdc-macro-sas/
    Il suffit de compiler le code et avoir la macro. Chaque fois que tu voudra faire un TDC, tu écriras juste une ligne.

    Une autre solution est d'utiliser la PROC transreg
    Tu poses une bonne question ! je ne sais pas ddutout c'est qu'un tableau disjonctif complet en toute honnêteté. Je n'ai pas eu énormément de cours en SAS donc je ne connais que les fonctions de base. Après avoir installé la version SAS sur mon pc, j'ai finalement tapé ce programme :

    DATA Matable ;
    LENGTH score $2 ;
    INPUT id score ;
    CARDS ;
    1 +
    2 =
    3 -
    4 =
    5 --
    6 ++
    7 +
    ;
    Run ;

    DATA score (keep = id score v1 v2 v3 v4 v5 v6 v7 v8 v9 v10) ;
    SET Matable;
    v1 = (score = "+") ;
    v2 = (score = "=") ;
    v3 = (score = "-") ;
    v4 = (score = "--") ;
    v5 = (score = "++") ;
    v6 = (score = " ") ;
    v7 = (score = " ") ;
    v8 = (score = " ") ;
    v9 = (score = " ") ;
    v10 = (score = " ") ;
    run ;

    Haha malheureusement, voilà ce que j'obtiens :
    Nom : Projet 2 - 1.PNG
Affichages : 2282
Taille : 1,8 KoNom : Projet 2 - 2.PNG
Affichages : 2455
Taille : 5,2 Ko

    Je me doute que cela serait trop simple de mettre des . dans les " " pour les variables 6 a 10. Et pourquoi j'ai une inversion entre mon Id et score contrairement à ce qu'on a dans l'énoncé ?

    Au final je pense que l'écriture du programme est trop simple. Enfin je me dis, je suis en master, je pense pas qu'on attende de moi un truc aussi simple.

  5. #5
    Membre éprouvé
    Avatar de Haache
    Homme Profil pro
    Doctorant & Ingénieur Statiaticien Economiste
    Inscrit en
    Mars 2014
    Messages
    349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations professionnelles :
    Activité : Doctorant & Ingénieur Statiaticien Economiste

    Informations forums :
    Inscription : Mars 2014
    Messages : 349
    Points : 1 009
    Points
    1 009
    Billets dans le blog
    8
    Par défaut
    Justement c'est ce qu'on appelle un Tableau Disjonctif Complet. Transformer les modalités des variables explicatives en variables dichotomiques (prenant 0 si l'individu n'avait pas la modalité et 1 sinon).

    Votre méthode marche correctement, mais elle n'est pas très adaptée à cette situation. Vous avez utilisé les booléens et vous êtes obligés d'utiliser autant de requêtes que de modalités. Maintenant imaginer qu'on ait 10 variables qualitatives, avec chacune 6 modalités.

    Dites-moi, allez vous taper 60 requêtes? C'est-à-dire au moins 60 lignes de codes?
    Si oui, alors et si c'était 100 variables?
    • Faites un tour sur mon siteweb professionnel www.aristideelysee.16mb.com Des codes dans la section "media et code" pouvant vous aider que vous pouvez aussi partager sur les réseaux sociaux.
    • Visiter mon blog en cliquant ici! Des techniques, astuces et macros pour l'analyse quantitative.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 3
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Haache Voir le message
    Justement c'est ce qu'on appelle un Tableau Disjonctif Complet. Transformer les modalités des variables explicatives en variables dichotomiques (prenant 0 si l'individu n'avait pas la modalité et 1 sinon).

    Votre méthode marche correctement, mais elle n'est pas très adaptée à cette situation. Vous avez utilisé les booléens et vous êtes obligés d'utiliser autant de requêtes que de modalités. Maintenant imaginer qu'on ait 10 variables qualitatives, avec chacune 6 modalités.

    Dites-moi, allez vous taper 60 requêtes? C'est-à-dire au moins 60 lignes de codes?
    Si oui, alors et si c'était 100 variables?
    Pas faux, je tenterai pas le coup avec 60 requêtes alors avec 100... Bon bah je vais lire attentivement ton post ; je l'avais survolé et cela m'avait donné mal au crâne déjà. Ce qui m'étonne c'est que nous l'avons pas vu le Tableau Disjonctif Complet. Mais merci en tout cas !

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    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 : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    Justement, la macro langage donne mal au crâne pour quelqu’un non initié. Je te conseille la deuxième proposition de HAACHE la PROC TRANSREG.
    https://support.sas.com/documentatio...eg_sect006.htm

    Bon courage à toi et bonne année à vous tous.

  8. #8
    Membre régulier Avatar de Clairant
    Homme Profil pro
    Doctorant en économie (UdeM), Ingénieur Statisticien Economiste
    Inscrit en
    Mars 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Doctorant en économie (UdeM), Ingénieur Statisticien Economiste

    Informations forums :
    Inscription : Mars 2015
    Messages : 79
    Points : 71
    Points
    71
    Par défaut
    Bonjour SASM1;

    Si tu as du mal à comprendre la macro de Haache bien que ce n'est pas très difficile à comprendre, tu peux utiliser ce code très simple avec la PROC TRANSREG :

    /* Code simple à utiliser */

    proc transreg data=sas.base_1 design noprint; /* L'option DESIGN indique qu'il est inutile d'essayer de donner une valeur aux coefficients du modèle,
    et que cette procédure n'a pour but que de produire des données transformées */
    model class (Sexe--Nombre_d_enfants / ZERO=NONE); /* après la fonction Class de l'instruction model, tu listes les variables à transformer
    ou bien tu peux donner une plage comme ce que j'ai fait ici pour gagner du temps..Baaah */
    output out=work.TDC (drop= _type_--intercept); /* cette instruction permet de récupérer les données transformées dans une table SAS.
    Ces données sont enrichies de 3 variables inutiles : INTERCEPT, _TYPE_ et _NAME_. Mais avec l'option drop tu peux les supprimer */
    run;

    tu peux copier le code et modifier à ton gré. Sinon pour plus d'informations tu peux lire l'aide en ligne proposé par Hossward : https://support.sas.com/documentatio...eg_sect006.htm

    Bon courage
    **************************************************************************************************************************************************************
    L'avenir est dans le numérique.

    **********************************************************

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/01/2011, 12h39
  2. [XL-2007] récupérer la valeur d’une variable lors d’une réexécution événementielle
    Par Harry Covair dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/10/2009, 19h37
  3. [VBS]Soustraire les éléments d’une variable
    Par Edoxituz dans le forum VBScript
    Réponses: 15
    Dernier message: 21/02/2006, 18h46
  4. Passer la valeur dune variable javascript à une variable xsl
    Par nramariavelo dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 12/12/2005, 17h27
  5. récupérer la valeur d’une variable de type radio
    Par amelhog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/08/2005, 09h43

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