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

Macro Discussion :

Recoder des valeurs d'une variable sur un tableau de grande taille


Sujet :

Macro

  1. #1
    Membre averti

    Homme Profil pro
    Technical Account Manager
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technical Account Manager

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 318
    Points
    318
    Billets dans le blog
    1
    Par défaut Recoder des valeurs d'une variable sur un tableau de grande taille
    Bonjour à tous,

    Voici mon problème : Dans un tableau de données de plus de 18.000 lignes j'ai une variable contenant le code_naf d'un établissement.
    Pour simplifier la variable je voudrais recoder les valeurs en fonction du secteur d'activité de l'établissement (industrie, immobilier, enseignement, etc...), sachant que j'ai à disposition la liste des secteurs avec le code correspondant

    J'ai essayé avec le code suivant mais le problème c'est qu'il faut tout saisir manuellement, ça va prendre beaucoup de temps

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    %Macro Naf(annee);
    DATA Table.Tps&annee;
    SET Table.Tps&annee;
    IF CODE_NAF2008 < "3511Z" THEN
    CODE_NAF2008 = "Indus";
    IF CODE_NAF2008 >= "3511Z" & CODE_NAF2008 < "4110A" THEN
    CODE_NAF2008 = "Produ";
    %Mend;
    Quelqu'un a une idée !?

  2. #2
    Membre actif
    Homme Profil pro
    Analyste - Information médicale
    Inscrit en
    Mars 2012
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste - Information médicale
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2012
    Messages : 72
    Points : 255
    Points
    255
    Par défaut
    Bonjour,

    Si tu as à ta disposition la liste des codes NAF avec le secteur correspondant dans une table, tu peux créer un format à partir de cette table, via proc format.
    Puis avec une fonction "put" tu crées une variable secteur en appliquant ton format au code NAF.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    /*Créer un format nommé "$ftest" où "name" est la variable code NAF pour toi et "sex" le secteur à appliquer*/
    data format; set sashelp.class (rename=(name=start sex=label)); fmtname='$ftest'; run;
    proc format library=work cntlin=format; run;
     
    /*Creér une variable "formate" qui correspond à l'aplication du format créé sur la variable "name" via la fonction put*/
    data res; set sashelp.class; formate=put(name,$ftest.); run;
    proc freq data=res; table name formate; run;
    Ciao !

  3. #3
    Membre averti

    Homme Profil pro
    Technical Account Manager
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technical Account Manager

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 318
    Points
    318
    Billets dans le blog
    1
    Par défaut
    Bonjour Fabien,

    Le problème c'est que je n'ai pas le secteur dans la table. Il faut le créer à partir du code_naf

    Dommage parce-que c'était une bonne idée de passer par le procédure format.

    Tu penses que c'est possible en créant une liste des valeurs possibles du secteur ?

  4. #4
    Membre actif
    Homme Profil pro
    Analyste - Information médicale
    Inscrit en
    Mars 2012
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste - Information médicale
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2012
    Messages : 72
    Points : 255
    Points
    255
    Par défaut
    Désolé je ne comprends pas.
    Tu as la liste des codes NAF d'un secteur donné dans une base SAS ou un fichier Excel ?

  5. #5
    Membre averti

    Homme Profil pro
    Technical Account Manager
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technical Account Manager

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 318
    Points
    318
    Billets dans le blog
    1
    Par défaut
    Les codes naf sont dans une table SAS ("3511Z"), mais pas les secteurs d'activités correspondant aux codes dans la table.
    Il faut les créer à partir d'un programme
    J'ai comme information une liste écrite sur une feuille de papier avec les secteurs d'activité correspondant au code naf:
    ex : Industrie a un code naf commençant par 05,06,07,08,09

  6. #6
    Membre actif
    Homme Profil pro
    Analyste - Information médicale
    Inscrit en
    Mars 2012
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste - Information médicale
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2012
    Messages : 72
    Points : 255
    Points
    255
    Par défaut
    Ah d'accord, c'est donc de créer tes sections par code qui t'embête.
    Donc il faudra bien que tu traduises un moment donné sur ordi ce que tu as sur ta feuille, soit tu fais un bout de code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    * Tous les codes commençant par 05,06,07,08,09 vont dans industrie :
    if code in: ('05','06','07','08','09') then secteur='Industrie';
    Soit tu télécharges la base des codes NAF en utilisant ton meilleur "ami" : Google, par exemple via : http://www.insee.fr/fr/methodes/defa...08/naf2008.htm.
    Puis tu intègres cette base dans ton environnement SAS.

    Bon courage !

  7. #7
    Membre averti

    Homme Profil pro
    Technical Account Manager
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technical Account Manager

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 318
    Points
    318
    Billets dans le blog
    1
    Par défaut
    Ah oui c'est propre ça ! merci

    Effectivement pas le choix, il faut utiliser la table du code_naf sur le site que tu as donné.


    Auparavant j'avais trouvé une autre solution mais moins efficace que la tienne Fabien. Si ça peut aider quelqu'un :
    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
     
    /* A partir des tables du code_naf trouvées sur internet (table "section" et "divisions"), utiliser la lettre correspondante au secteur. */ 
    /* Utiliser la fonction substr pour ne garder que les 2 premiers nombres du code naf. */
     
    DATA Bibliotheque.Table&annee;
    SET Biblitoheque.Table&annee;
    CODE_SECTEUR = substr(CODE_NAF2008,1,2);
    %ModLettre("B",05,09);
    RUN;
     
    /* Passer par une macro intermédiaire avec comme paramètre la lettre, les numéros minimum et maximum de la lettre*/
    /* Si le code se trouve entre la borne inférieure et maximum alors on affecte une nouvelle lettre dans la variable */
     
    %MACRO ModLettre(lettre,inf,max);
    IF CODE_SECTEUR >= &inf. & CODE_SECTEUR <= &max. THEN
    SECTEUR = &lettre;
    %Mend;

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

Discussions similaires

  1. Ajouter des valeurs dans une listebox sur click
    Par bobosh dans le forum VBA Access
    Réponses: 8
    Dernier message: 11/08/2008, 13h47
  2. Stockage d'un historique des valeurs d'une variable temporaire
    Par keketteboy dans le forum VBA Access
    Réponses: 3
    Dernier message: 01/07/2008, 17h52
  3. Somme des valeurs d'une variable
    Par stefsas dans le forum SAS Base
    Réponses: 2
    Dernier message: 03/06/2008, 14h49
  4. Réponses: 2
    Dernier message: 09/03/2008, 07h45
  5. Réponses: 2
    Dernier message: 21/09/2007, 11h37

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