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 :

Opérande caractère trouvé dans la fonction %EVAL ou condition %IF là où un opérande


Sujet :

Macro

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2014
    Messages : 21
    Points : 7
    Points
    7
    Par défaut Opérande caractère trouvé dans la fonction %EVAL ou condition %IF là où un opérande
    Bonjour à tous,

    J'ai un problème dans une macro que j'arrive pas a debugger depuis 24h.

    Ci-dessous, le necessaire car c'est une grosse macro et je peut pas tout recopier.




    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    %MACRO IDENT;
     
    ---------------------------
    ---------------------------
    ---------------------------
     
     
    data ident_hta4 (drop=code_naf2 code_naf) ;
    merge
    ident_hta3 (in=a)
    naf2008 (in=b);
    by code_naf;
    if a;
    attrib code_naf5 length=$5 informat=$5. format=$5. ;
    if length(code_naf)=4 then code_naf5 = Code_NAF2;
    else code_naf5 =code_naf;
    run;
     
    proc sql noprint; 
    create table year_treatment as
    select distinct annee from ident_hta4 ; 
    quit;
     
    DATA _NULL_ ;
    SET year_treatment ;
    CALL SYMPUT ('year', compress(annee)) ;
    RUN ;
     
    OPTIONS mlogic symbolgen mprint ;
     
     
    %if &year. <= 2013 %then 
    %do;
    proc sql ;
     
    create table ident_hta5 as select distinct 
    a.annee,
    a.source,
    a.no_centre,
    a.no_pdm,
    a.segment,
    a.tarif,
    a.option,
    a.version,
    a.ea,
    a.turpe1,
    a.ca1,
    a.turpe2,
    a.ca2,
    a.code_NAF5,
    b.code_insee,
    b.nom_pdm
    /*b.localite*/
     
    from ident_hta4 as a 
    left join
    ref_id.Identification as b
     
    on a.source = b.source 
    and a.annee = input(b.annee, best.)
    and a.no_centre = b.centre
    and a.no_pdm = b.no_pdm
     
    ;
     
    quit ;
    %end;
     
    %else
     
    %do;
     
    proc sql ;
     
    create table ident_hta5 as select distinct 
    a.annee,
    a.source,
    a.no_centre,
    a.no_pdm,
    a.segment,
    a.tarif,
    a.option,
    a.version,
    a.ea,
    a.turpe1,
    a.ca1,
    a.turpe2,
    a.ca2,
    a.code_NAF5,
    b.code_insee,
    b.nom_pdm
    /*b.localite*/
     
    from ident_hta4 as a 
    left join
    admin.structure_id_nom_client as b
     
    on a.source = b.source 
    and a.annee = input(b.annee, best.)
    and a.no_centre = b.centre
    and a.no_pdm = b.no_pdm
    ;
     
    quit ;
    %end;
     
    /**********************************************/
    /*	5 - ENVOIE VERS EXCEL DU TABLEAU CROISE */
    /**********************************************/
     
    proc export data = ident_hta5
    outfile = "&CHEMIN_ADMIN.\data\Archives\Identification_HTA_C1_&annee1..xls"
    dbms=excel2000
    replace ;
    run ;
     
    %MEND erd_req_ident_hta ;
     
    %erd_req_ident_hta ;
    En effet mon objectif est que si l'année de traitement est inférieur à 2013


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %if &year. <= 2013 %then

    , que s'exécute la proc sql équivalente sinon la seconde proc sql.


    Le problème que je rencontre est que pour les années 2013, tout marche très bien mais pour 2014 ou plus j'ai ce message d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERROR: Opérande caractère trouvé dans la fonction %EVAL ou condition %IF là où un opérande
    Pouvez vous m'aider SVP?

    CdT

  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,

    Essaye en remplaçant ta condition comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    %if %sysevalf(&year. <= 2013) %then 
    %do;
    en espérant que cela suffise !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2014
    Messages : 21
    Points : 7
    Points
    7
    Par défaut Ca ne marche pas
    En appliquant ce que tu as dit, ca donne le même message d'erreur.

  4. #4
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    Bonjour,

    Juste une remarque:

    l'appelle de la macro est différent avec son nom!

    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2014
    Messages : 21
    Points : 7
    Points
    7
    Par défaut c'est pas ça le problème
    en effet, jai voulu changé de nom lors du poste. Sinon que c'est pas ça le problème. Merci

  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
    Tu as vérifié que ta macro variable year s'est construite sans problème? Un %put juste après sa création pour être sûr de ce qu'il y'a dedans !

  7. #7
    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
    My bad tu as mis l'option Symbolgen donc tu l'as fait...

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2014
    Messages : 21
    Points : 7
    Points
    7
    Par défaut macro variable year
    Pour l'année 2013, tout fonctionne très bien . C'est pour 2014 que ca ne fonctionne pas et je sais pas pourquoi.

    Pour 2014 j'ai aussi un WARNING sur year qui est le suivant:

    WARNING: Référence symbolique apparente YEAR non traité.

    Merci

  9. #9
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    J'ai fait un exemple simple et ca fonctionne.

    Je pense que le mieux c'est de poster toute la log
    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
     
    option symbolgen;
     
    data test;
    input year;
    cards;
    2013
    2014
    2015
    ;run;
     
    %MACRO IDENT;
     
     
    DATA _NULL_ ;
    SET test ;
    CALL SYMPUT ('year',year) ;
    RUN ;
    %put &year;
     
    %if &year. <= 2013 %then %do;
    data t;
    set sashelp.class
    ;run;
    %end;
     
    %else
     
    %do;
    data t1;
    set sashelp.class(obs=2);
    run; 
    %end;
     
     
    %MEND  ;
     
    %IDENT ;
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  10. #10
    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
    Va falloir éplucher ton log, même les notes en bleu qui peuvent expliquer le problème. Peut-être qu'une table a été créé avec succès mais avec 0 observations et que donc ta macro variable ne s'est pas faites. Ou une valeur manquante qui traîne dans ta variable année (après le merge il peut s'en créer). Le problème peut venir de beaucoup de sources

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2014
    Messages : 21
    Points : 7
    Points
    7
    Par défaut tu as raison
    Tu a raison . En revoyant les tables précédentes, il y a effectivement un qui avait 0 observation.

    Dès que j'ai réglé ce problème, tout est rentré dans l'ordre. Merci les amis .

    Cordialement.

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

Discussions similaires

  1. [XL-2000] Mise en forme condit en fonction 3 caractères trouvé dans une colonne
    Par crissud dans le forum Conception
    Réponses: 3
    Dernier message: 28/12/2010, 14h16
  2. Appeler une variable globale dans la fonction eval
    Par Romanops dans le forum Langage
    Réponses: 2
    Dernier message: 03/08/2007, 04h24
  3. Variable générale non trouvée dans une fonction
    Par mickael.be dans le forum Langage
    Réponses: 10
    Dernier message: 21/02/2006, 19h18
  4. [PHP-JS] Formulaire non trouvé dans une fonction
    Par philippe30 dans le forum Langage
    Réponses: 4
    Dernier message: 11/12/2005, 21h53

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