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 :

Required operator not found in expression


Sujet :

Macro

  1. #1
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut Required operator not found in expression
    Bonsoir,

    j'ai un probleme d'execution d'un macro qui a pour but le traitement des reseaux naives baysiens. Voici le code:
    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
    %macro NB(train=,score=,nclass=,target=,inputs=);
     %let error=0;
     %if %length(&train) = 0 %then %do;
     %put ERROR: Value for macro parameter TRAIN is missing ;
     %let error=1;
     %end;
     %if %length(&score) = 0 %then %do;
     %put ERROR: Value for macro parameter SCORE is missing ;
     %let error=1;
     %end;
     %if %length(&nclass) = 0 %then %do;
     %put ERROR: Value for macro parameter NCLASS is missing ;
     %let error=1;
     %end;
     %if %length(&target) = 0 %then %do;
     %put ERROR: Value for macro parameter TARGET is missing ;
     %let error=1;
     %end;
     %if %length(&inputs) = 0 %then %do;
     %put ERROR: Value for macro parameter INPUTS is missing ;
     %let error=1;
     %end;
     %if &error=1 %then %goto finish;
     %if %sysfunc(exist(&train)) = 0 %then %do;
     %put ERROR: data set &train does not exist ;
     %let error=1;
     %end;
     %if %sysfunc(exist(&score)) = 0 %then %do;
     %put ERROR: data set &score does not exist ;
     %let error=1;
     %end;
     %if &error=1 %then %goto finish;
     %LET nvar=0;
     %do %while (%length(%scan(&inputs,&nvar+1))>0);
     %LET nvar=%eval(&nvar+1);
     %end;
     proc freq data=&train noprint;
     tables &target / out=_priors_ ;
     run;
     %do k=1 %to &nclass;
     /*NESUG 17 Posters*/
     
     proc sql noprint;
     select percent, count into :Prior&k, :Count&k
     from _priors_
     where &target=&k;
     quit;
     %end k;
     %do i=1 %to &nvar;
     %LET var=%scan(&inputs,&i);
     %do j=1 %to &nclass;
     proc freq data=&train noprint;
     tables &var / out=_&var.&j (drop=count) missing;
     where &target=&j;
     run;
     %end j;
     data _&var ;
     merge %do k=1 %to &nclass;
     _&var.&k (rename=(percent=percent&k))
     %end; ;
     by &var;
     %do k=1 %to &nclass; if percent&k=. then percent&k=0; %end;
     run;
     proc sql;
     create table &score AS
     select a.*
     %do k=1 %to &nclass;
     , b.percent&k as percent&k._&var
     %end;
     from &score as a left join _&var as b
     on a.&var=b.&var;
     quit;
     %end i;
     data &score (drop=L product maxprob
     %do i=1 %to &nclass; percent&i._: %end;);
     set &score;
     maxprob=0;
     %do k=1 %to &nclass;
     array vars&k(&nvar) %do i=1 %to &nvar; percent&k._%scan(&inputs,&i) %end; ;
     product=log(&&Prior&k);
     %do L=1 %to &nvar;
     %if (vars&k(&L) > 0) %then product=product+log(vars&k(&L)); %else
     product=product+log(0.5)-log(&&count&k);
     %end;
     %if product>maxprob %then %do; maxprob=product; _class_=&k; %end;
     %end k;
     run;
     %finish: ;
    %mend NB;
     
    libname EQPD 'C:\temp\dataset';
     
     
    %NB(train=EQPD.adult,score=EQPD.adult_test,nclass=2,target=n,inputs=age sex education occupation workclass race);
    l'erruer: Required operator not found in expression: (vars&k(&L) > 0)

    est ce que quelqu'un peut m'aider

    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 : 52
    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
    Par défaut
    Bonjour,

    ce doit être ta vars&k(&L) qui n'est pas générée. En effet, que représente-t-elle ?

    Pour t'aider il faut que tu utilises MPRINT et MFILE afin de visualiser le code généré par SAS. De cette façon tu trouveras vite ton erreur dans ce mélande de génération de boucle macro et d'Array.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    Bonjour,

    Merci bcppp pour votre je suis arrivé à resoudre mon pb c 'est tres gentil


    THX

Discussions similaires

  1. Operating System not found
    Par lilia_dream dans le forum VMware
    Réponses: 4
    Dernier message: 18/04/2010, 21h28
  2. Required package 'qrpt70' not found
    Par freud dans le forum Composants VCL
    Réponses: 9
    Dernier message: 13/06/2008, 21h57
  3. Operating system not found
    Par Halleck dans le forum Windows XP
    Réponses: 5
    Dernier message: 02/05/2008, 23h24
  4. operating system not found
    Par mmb04 dans le forum Windows Vista
    Réponses: 2
    Dernier message: 25/01/2008, 18h22
  5. Réponses: 0
    Dernier message: 05/12/2007, 09h09

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