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 :

argument dans la fonction scan


Sujet :

Macro

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 32
    Points : 9
    Points
    9
    Par défaut argument dans la fonction scan
    Bonjour à tous,

    J'ai un petit problème avec la fonction scan de sas. Je m'explique : je voudrai mettre 2ème argument de la fonction une variable de ma table. Ça ne marche pas et je ne vois pas trop comment faire autrement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if alea&i > %sysevalf(%scan(&fqaa,age_encours,' ')) then do;
    	etat_adh='Autonome';
    end;
    Pour info j'ai réussi avec une boucle mais le temps d'exécution est beaucoup trop long.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    %do j=1 %to 66;
    if age_encours=%eval(&j+44) then do;
    	if alea&i > %sysevalf(%scan(&hqaa,&j,' ')) then do;
    		etat_adh='Autonome';
    	end;
    %end;
    Merci d'avance.

  2. #2
    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


    mais tu as la fonction SCAN pour une étape DATA et non la macro %SCAN. Tu as essayé ?
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  3. #3
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Je n'ai rien compris

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 32
    Points : 9
    Points
    9
    Par défaut
    Je viens d'essayer et voila la reponse dans le log :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ERROR: La fonction macro %SYSEVALF a trop d'arguments. Les arguments superflus seront ignorés.
    ERROR: Opérande de conversion %SYSEVALF 'AGE_ENCOURS' inconnu ; conversion interrompue.
    ERROR: Opérande caractère trouvé dans la fonction %EVAL ou condition %IF là où un opérande numérique
           est requis. La condition était : scan(1 2 3 4 5 6 etc

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 32
    Points : 9
    Points
    9
    Par défaut
    Megamind2,

    En fait je voudrais utiliser l'age de la personne comme index dans la fonction scan pour la macro-variable fqaa, ie que si la personne a 50 ans, je voudrais comparer la colonne alea&i avec la 50eme valeur de la macro-variable fqaa.

    C'est plus clair ?

  6. #6
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Ju ne serais pas entrain de de comparer du alpha numérique?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if alea&i > %sysevalf(%scan(&hqaa,&j,' '))
    Si c'est le cas, faudrait faire iun input

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if input(alea&i,best.) > %sysevalf(input(%scan(&hqaa,&j,' '),best.))
    Brice

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 32
    Points : 9
    Points
    9
    Par défaut
    Merci pour la réponse mais en fait cette manière là marche (avec la boucle), mais comme je disais le temps d'execution avec la boucle est beaucoup trop long...

    Du coup c'est pour ça que je cherche à savoir si on peut mettre le nom d'une colonne comme 2ème argument dans la fonction scan.

  8. #8
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    ça sert à quoi si tu ne parcours pas ta macro liste hqaa. Cela veut dire que tu veux juste tester avec une seule variable?

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 32
    Points : 9
    Points
    9
    Par défaut
    Désolé mais je ne comprends pas ta question

  10. #10
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Visiblement tu scanes ta macro qui est une liste séparée par des blancs, et pour chaque valeur scanner tu testes. Alors je ne vois pas pourquoi tu veux rajouter une colonne en dur dans ta fonction sacn.
    Comme j'ai pas tout le code, c'est chaud de tout capter

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 32
    Points : 9
    Points
    9
    Par défaut
    En fait, pour essayer d'etre plus clair , j'ai dans ma table une colonne avec l'age en cours de la personne et une colonne avec un nombre aleatoire.
    Dans une autre table j'ai une colonne qaa : la 1ere valeur correspond à 45 ans la 2è à 46 et ainsi de suite. Comme je ne peux pas travailler sur deux tables en meme temps (enfin je crois) j'ai crée une macro variable &hqaa où j'ai stocké les valeurs de la colonne qaa séparé par un espace).

    Donc suivant la valeur de l'age en cours, je voudrais recuperer la valeur de la macro-variable hqaa.

    C'est plus clair ou pas du tout ?

  12. #12
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    T'as été clair
    Pourquoi faire simple quant on peut faire plus compliqué?

    Je suppose qu'il n'y a pas une clé de jointure commune aux deux tables pour faire plus compliquer.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par bublibus Voir le message
    Comme je ne peux pas travailler sur deux tables en meme temps (enfin je crois)
    que veux tu faire plus exactement ? peut être une proc sql avec une clause where suffira et /ou avec étape data et proc sort.

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 32
    Points : 9
    Points
    9
    Par défaut
    Effectivement il n'y en a pas...

    ps: merci beaucoup pour la rapidité des réponses

  15. #15
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    De rien
    Navré de ne pas pouvoir t'aider

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 32
    Points : 9
    Points
    9
    Par défaut
    Pour mettre le contexte, je dois faire une projection dans le temps de l'état des personnes, leur âge évolue donc chaque année. Trois états sont possibles : Autonome, dépendant ou Décès. J'ai donc des tables de probabilité me permettant de savoir avec quelle proba la personne va changer ou non d'état. Chaque personne est dotée d'un nombre aléatoire, si ce nombre est inférieur à la probabilité changement d'état.

  17. #17
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Comment ce nombre aléatoire est généré et comment est-il associé à chaque personne (son âge)?

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 32
    Points : 9
    Points
    9
    Par défaut
    En fait pour ne pas m'embeter dans la table où sont les personnes, j'ai generer 70 colonnes avec par exemple pour la 1ere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alea1 = rand('uniform');
    et du coup la 1ere année je prends alea1, la deuxieme année alea2 etc

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 32
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par bublibus Voir le message
    Pour info j'ai réussi avec une boucle mais le temps d'exécution est beaucoup trop long.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    %do j=1 %to 66;
    if age_encours=%eval(&j+44) then do;
    	if alea&i > %sysevalf(%scan(&hqaa,&j,' ')) then do;
    		etat_adh='Autonome';
    	end;
    %end;
    Désolé mais ça revient pas un peu ça (code qui marche mais trop long en exécution) ?

    Ce que je veux éviter justement c'est de faire une boucle.

  20. #20
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    T'as raison, je pense que t'as pas le choix de faire une boucle

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. passage d'argument dans une fonction
    Par wadcyr8_197 dans le forum C++
    Réponses: 5
    Dernier message: 20/07/2007, 09h41
  2. Généricité des Input Arguments dans une fonction
    Par RaphTIM dans le forum MATLAB
    Réponses: 5
    Dernier message: 06/06/2007, 16h28
  3. Passer un tableau PHP en argument dans une fonction javascript ?
    Par The Molo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/05/2007, 12h31
  4. Erreur d'argument dans une fonction
    Par rouliane dans le forum MATLAB
    Réponses: 6
    Dernier message: 12/12/2006, 11h52
  5. arguments dans ma fonction main
    Par salseropom dans le forum C
    Réponses: 10
    Dernier message: 15/03/2006, 23h12

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