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 :

Interaction entre SAS/Connect et macros


Sujet :

Macro

  1. #1
    Membre à l'essai
    Femme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Octobre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études statistiques

    Informations forums :
    Inscription : Octobre 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut Interaction entre SAS/Connect et macros
    Bonjour,

    Je rencontre quelques soucis pour créer une macro en rsubmit;

    Si j'écris :

    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
    rsubmit;
    %macro liste_cli(agent);
     
    /* EPARGNE HAUT DE GAMME*/
    proc sql; select count(*) into :nomb from epargne_hdg; quit;
    %put &nomb;
     
    %if %eval(1*&nomb) NE 0 %then %do;
    data epargne_hdg;
     set epargne_hdg (keep=id_cli mt_epargne) nobs=n;
     crit_epargne=1;
    run;
    %end;
    %if %eval(1*&nomb) EQ 0 %then %do; proc datasets; delete epargne_hdg; quit; %end;
    %mend liste_cli;
    endrsubmit;
    Tout se passe bien
    Seulement, je dois rentrer les rsubmit dans ma macro parce qu'elle contiendra d'autres morceaux de programmes qui ne devront pas être soumis sur le réseau.

    Donc je fais :

    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
    rsubmit;
    %macro liste_cli(agent);
     
    /* EPARGNE HAUT DE GAMME*/
    rsubmit;
    proc sql; select count(*) into :nomb from epargne_hdg; quit;
    %put &nomb;
     
    %if %eval(1*&nomb) NE 0 %then %do;
    data epargne_hdg;
     set epargne_hdg (keep=id_cli mt_epargne) nobs=n;
     crit_epargne=1;
    run;
    %end;
    %if %eval(1*&nomb) EQ 0 %then %do; proc datasets; delete epargne_hdg; quit; %end;
    endrsubmit;
    %mend liste_cli;
    Et là, rien ne va, j'obtiens :

    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
    NOTE: Remote submit to UNIXGAN commencing.
    MPRINT(LISTE_CLI):  ; proc sql;
    MPRINT(LISTE_CLI):   select count(*) into :nomb from epargne_hdg;
    MPRINT(LISTE_CLI):   quit;
    MLOGIC(LISTE_CLI):  %PUT &nomb
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    &nomb
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    ERREUR: Opérande caractère trouvé dans la fonction %EVAL ou condition %IF là où un opérande
            numérique est requis. La condition était : 1*&nomb
    MLOGIC(LISTE_CLI):  %La condition IF %eval(1*&nomb) NE 0 est VRAI
    ERREUR: L'exécution de la macro LISTE_CLI va s'arrêter.
    MLOGIC(LISTE_CLI):  Fin de l'exécution.
    354   proc sql;
    355   select count(*) into :nomb from epargne_hdg;
    356   quit;
    NOTE: The PROCEDURE SQL printed page 3.
    NOTE: PROCEDURE SQL used:
          real time           0.03 seconds
          cpu time            0.00 seconds
    NOTE: Remote submit to UNIXGAN complete.
    Je crois qu'il y a un souci entre SAS/Connect et la définition de mes macrovariables qui ne sont pas bien compilées. Enfin ce n'est qu'une idée.

    Y a t-il quelqu'un qui a déjà rencontré ce problème et qui saurait le résoudre ?

    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
    le mieux est d'isoler ce qui doit partir sur UNIXGAN et ce qui doit être exécuté sur le poste.
    Une troisième macro pourras appeler l'un ou l'autre mais avec un exécution en LOCAL.

    Tu évites les double Rsubmit comme tu as.
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  3. #3
    Membre à l'essai
    Femme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Octobre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études statistiques

    Informations forums :
    Inscription : Octobre 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par datametric Voir le message
    le mieux est d'isoler ce qui doit partir sur UNIXGAN et ce qui doit être exécuté sur le poste.
    Une troisième macro pourras appeler l'un ou l'autre mais avec un exécution en LOCAL.

    Tu évites les doubles Rsubmit comme tu as.
    Merci pour ta réponse rapide

    donc en gros je crée une macro de cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    %macro liste_cli(agent);
     
    rsubmit;
    %macro etape1();
    %mend etape1;
    endrsubmit;
     
    %macro etape2();
    proc export;
    ...
    run;
    %mend etape2;
     
    %mend liste_cli;
    Je crois que je vais essayer de faire ça, merci beaucoup.

    Quoi qu'il en soit, je me demande bien ce qui cloche avec l'utilisation du rsubmit à l'intérieur de la macro.

    J'ai essayé de comprendre cet article qui avait l'air de mettre le doigt sur le problème mais j'avoue que je n'ai pas réussi à en faire quelque chose.
    http://support.sas.com/techsup/technote/ts697.pdf

    Si ça t'inspire une explication, je serais intéressée de la connaitre.

  4. #4
    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
    tu dois avoir l'appel sur le serveur d'une table en local ou vice-versa en fait. Le reste tombe en erreur car il manque cette macro variable.

    Par contre, tu écris une proc export qui n'existe pas dans le code initial donc je ne saurai t'aider sans le code définitif.

    Tu n'es pas obligé d'imbriquer autant de macro si ?
    N'oublie pas que les appels de Etape1 doivent être aussi sur le serveur mais que l'appel de Etape2 ne doit pas l'être.
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    Salut,

    Citation Envoyé par Laurinette57 Voir le message
    Quoi qu'il en soit, je me demande bien ce qui cloque avec l'utilisation du rsubmit à l'intérieur de la macro.

    Ton server ne connais pas ta macro locale (hors du rsubmit) donc tu ne peux pas lui demander de résoudre des macro-variables

    Tu dois decouper comme tu l'a deviné si tu veux envoyer des macro-variables sur le server il y a les macros %SYSLPUT %SYSRPUT (Local, Remote)

    x

  6. #6
    Membre à l'essai
    Femme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Octobre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études statistiques

    Informations forums :
    Inscription : Octobre 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par datametric Voir le message
    tu dois avoir l'appel sur le serveur d'une table en local ou vice-versa en fait. Le reste tombe en erreur car il manque cette macro variable.

    Par contre, tu écris une proc export qui n'existe pas dans le code initial donc je ne saurai t'aider sans le code définitif.

    Tu n'es pas obligé d'imbriquer autant de macro si ?
    N'oublie pas que les appels de Etape1 doivent être aussi sur le serveur mais que l'appel de Etape2 ne doit pas l'être.
    En fait je ne sais pas si je peux me permettre de mettre le code en entier.
    En gros je dois sortir la liste des clients d'une agence (qui est le paramètre de la macro).

    Je traite les données (étape 1) de telle manière que le tableau que je sors en Excel (étape 2) soit bien propre.

    Toutes mes tables sont sur le serveurs et sont grosses de telle manière que je ne peux pas les descendre en local pour les travailler.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Octobre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études statistiques

    Informations forums :
    Inscription : Octobre 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    MA MACRO :

    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
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
     
    /*options mprint mlogic symbolgen;*/
     
    rsubmit;
    options nodate nocenter nonumber nolabel validvarname=upcase compress=yes formdlim = '-';
    libname l "~/Gestpat/";
    libname m "~/Gestpat/Agences";
    endrsubmit;
    libname l slibref=l server=unixgan;
    libname m slibref=m server=unixgan;
     
    %macro liste_cli(agent);
    %syslput agent = &agent.;
    rsubmit;
    %macro etape1;
    /* Nombre de clients eligibles */
    data m.agence_&agent.;
     set l.idgrc_00_total(where=(code_icx="&agent."));
    run;
     
    /* Sur quels criteres ont ete selectionne les clients */
    title "Agence &agent."
    proc freq data=m.agence_&agent. order=data;
    tables type_prod / missing;
    run;
    title;
     
    /* Recuperer les infos demandees par Maryline */
    proc sort data=m.agence_&agent.(keep=idgrc) nodupkeys out=idgrc; by idgrc; run;
     
    proc sql;
    create table agence_&agent._cli as
     select a.idgrc,
            a.tit_sj,
            a.nom_rs,
            a.prenom,
            case
             when a.ancien =. then .
             else datepart(a.ancien)
            end as anciennete format date9.,
            case
             when a.dt_nais in(.,'01jan1951:00:00:00'dt) then .
             else datepart(a.dt_nais)
            end as dt_nais format date9.,
            b.idtypv,
            b.batesc,
            b.lieud,
            b.codpost,
            b.ville,
            a.nbrsksan as nb_contrats_sante,
           (a.nbcntia-a.nbrsksan) as nb_contrats_iard,
            a.ttcntprv as nb_contrats_vie
     from grc.per a, grc.adr b
     where a.idgrc in (select* from idgrc)
       and a.idgrc = b.idgrc
       and b.princip='Y'
     order by idgrc;
    quit;
     
    /* Récupération des infos par critère */
     
    data epargne_hdg pa_retraite ass_empr mrh_hdg chateau_luxe bateau cheval bijou multi_vehic multi_pno
         pharma chef_ent auto_luxe collectives;
     set m.agence_&agent.;
          if type_prod = "EPARGNE HDG"          then output epargne_hdg;
     else if type_prod = "PA RETRAITE HDG"      then output pa_retraite;
     else if type_prod = "ASSURANCE EMPRUNTEUR" then output ass_empr; 
     else if type_prod = "MRH HAUT DE GAMME"    then output mrh_hdg;
     else if type_prod = "CHATEAU_LUXE"         then output chateau_luxe;
     else if type_prod = "BATEAU"               then output bateau;
     else if type_prod = "CHEVAL"               then output cheval;
     else if type_prod = "BIJOUX/FOURRURES"     then output bijou;
     else if type_prod = "MULTI-VEHICULE"       then output multi_vehic; 
     else if type_prod = "MULTI-PNO"            then output multi_pno;
     else if type_prod = "PHARMA"               then output pharma;
     else if type_prod = "CHEF D'ENTREPRISE + DE 50 ANS"
                                                then output chef_ent;
     else if type_prod = "AUTO LUXE"            then output auto_luxe;
     else if type_prod = "COLLECTIVES"          then output collectives;
    run;
     
    /* EPARGNE HAUT DE GAMME*/
    proc sql noprint; select count(*) into :nomb from epargne_hdg; quit;
    /*%put &nomb;*/
    %if %eval(1*&nomb) NE 0 %then %do;
    data epargne_hdg;
     set epargne_hdg (keep=idgrc mtcntec) nobs=n;
     crit_epargne=1;
    run;
    %end;
    %if %eval(1*&nomb) EQ 0 %then %do; proc datasets nolist; delete epargne_hdg; quit; %end;
     
    /* PA EN RETRAITE */
    proc sql noprint; select count(*) into :nomb from pa_retraite; quit;
    /*%put &nomb;*/
    %if %eval(1*&nomb) NE 0 %then %do;
    data pa_retraite;
     set pa_retraite (keep=idgrc mtcntret);
     crit_retraite=1;
    run;
    %end;
    %else %if %eval(1*&nomb) EQ 0 %then %do; proc datasets nolist; delete pa_retraite; quit; %end;
     
    /* ASSURANCE EMPRUNTEUR */
    proc sql noprint; select count(*) into :nomb from ass_empr; quit;
    /*%put &nomb;*/
    %if %eval(1*&nomb) NE 0 %then %do;
    data ass_empr;
     set ass_empr (keep=idgrc mt_cap_dce);
     crit_ass_empr=1;
    run;
    %end;
    %else %if %eval(1*&nomb) EQ 0 %then %do; proc datasets nolist; delete ass_empr; quit; %end;
     
    /* MRH HAUT DE GAMME */
    proc sql noprint; select count(*) into :nomb from mrh_hdg; quit;
    /*%put &nomb;*/
    %if %eval(1*&nomb) NE 0 %then %do;
    data mrh_hdg;
     set mrh_hdg (keep=idgrc cdpo mnaca);
     crit_mrh_hdg=1;
     rename cdpo=cpg_mrh mnaca=prime_mrh;
    run;
    %end;
    %else %if %eval(1*&nomb) EQ 0 %then %do; proc datasets nolist; delete mrh_hdg; quit; %end;
     
    /* CHATEAU-LUXE */
    proc sql noprint; select count(*) into :nomb from chateau_luxe; quit;
    /*%put &nomb;*/
    %if %eval(1*&nomb) NE 0 %then %do;
    data chateau_luxe;
     set chateau_luxe (keep=idgrc cdpo09 mnaca);
     crit_chateau_luxe=1;
     rename cdpo09=cpt_chateau_luxe mnaca=prime_chateau_luxe;
    run;
    %end;
    %else %if %eval(1*&nomb) EQ 0 %then %do; proc datasets nolist; delete chateau_luxe; quit; %end;
     
    /* BATEAU */
    proc sql noprint; select count(*) into :nomb from bateau; quit;
    /*%put &nomb;*/
    %if %eval(1*&nomb) NE 0 %then %do;
    data bateau;
     set bateau (keep=idgrc cdpo mnaca valeur_venale_bateau longueur_bateau);
     crit_bateau=1;
     rename cdpo=cpg_bateau mnaca=prime_bateau;
    run;
    %end;
    %else %if %eval(1*&nomb) EQ 0 %then %do; proc datasets nolist; delete bateau; quit; %end;
     
    /* CHEVAL */
    proc sql noprint; select count(*) into :nomb from cheval; quit;
    /*%put &nomb;*/
    %if %eval(1*&nomb) NE 0 %then %do;
    data cheval;
     set cheval (keep=idgrc cdpo mnaca);
     crit_cheval=1;
     rename cdpo=cpg_cheval mnaca=prime_cheval;
    run;
    %end;
    %else %if %eval(1*&nomb) EQ 0 %then %do; proc datasets nolist; delete cheval; quit; %end;
     
    /* BIJOU-FOURRURES */
    proc sql noprint; select count(*) into :nomb from bijou; quit;
    /*%put &nomb;*/
    %if %eval(1*&nomb) NE 0 %then %do;
    data bijou;
     set bijou (keep=idgrc cdpo mnaca);
     crit_bijou_fourrure=1;
     rename cdpo=cpg_bijou mnaca=prime_bijou;
    run;
    %end;
    %else %if %eval(1*&nomb) EQ 0 %then %do; proc datasets nolist; delete bijou; quit; %end;
     
    /* MULTI-VEHIC */
    proc sql noprint; select count(*) into :nomb from multi_vehic; quit;
    /*%put &nomb;*/
    %if %eval(1*&nomb) NE 0 %then %do;
    data multi_vehic;
     set multi_vehic (keep = idgrc nb_contrat mnaca_total);
     rename nb_contrat=nb_vehic mnaca_total=prime_vehic_totale;
     crit_multi_vehic=1;
    run;
    %end;
    %else %if %eval(1*&nomb) EQ 0 %then %do; proc datasets nolist; delete multi_vehic; quit; %end;
     
    /* MULTI-PNO */
    proc sql noprint; select count(*) into :nomb from multi_pno; quit;
    /*%put &nomb;*/
    %if %eval(1*&nomb) NE 0 %then %do;
    data multi_pno;
     set multi_pno (keep=idgrc nb_contrat mnaca_total);
     crit_multi_pno=1;
     rename nb_contrat=nb_pno mnaca_total=prime_pno_totale;
    run;
    %end;
    %else %if %eval(1*&nomb) EQ 0 %then %do; proc datasets nolist; delete multi_pno; quit; %end;
     
    /* PHARMA */
    proc sql noprint; select count(*) into :nomb from pharma; quit;
    /*%put &nomb;*/
    %if %eval(1*&nomb) NE 0 %then %do;
    data pharma;
     set pharma (keep=idgrc cdpo mnaca);
     crit_pharma=1;
     rename cdpo=cpg_pharma mnaca=prime_pharma;
    run;
    %end;
    %else %if %eval(1*&nomb) EQ 0 %then %do; proc datasets nolist; delete pharma; quit; %end;
     
    /* CHEFS D ENTREPRISE */
    proc sql noprint; select count(*) into :nomb from chef_ent; quit;
    /*%put &nomb;*/
    %if %eval(1*&nomb) NE 0 %then %do;
    data chef_ent;
     set chef_ent (keep=idgrc csp_pri pcs_pri libactpr role catfoyer);
     crit_chef_ent=1;
    run;
    %end;
    %else %if %eval(1*&nomb) EQ 0 %then %do; proc datasets nolist; delete chef_ent; quit; %end;
     
    /* AUTO DE LUXE */
    proc sql noprint; select count(*) into :nomb from auto_luxe; quit;
    /*%put &nomb;*/
    %if %eval(1*&nomb) NE 0 %then %do;
    data auto_luxe;
     set auto_luxe (keep=idgrc cdpo marque_vehic modele_vehic groupe_vehic classe_vehic valeur_vehic);
     crit_auto_luxe=1;
     rename cdpo=cpg_luxe;
    run;
    %end;
    %else %if %eval(1*&nomb) EQ 0 %then %do; proc datasets nolist; delete auto_luxe; quit; %end;
     
    /* COLLECTIVES */
    proc sql noprint; select count(*) into :nomb from collectives; quit;
    /*%put &nomb;*/
    %if %eval(1*&nomb) NE 0 %then %do;
    data collectives;
     set collectives (keep=idgrc no_siret raisoca raisocb nbcontrat scont dateff reg tetco montantg
                           ass1 taux1 salaire1 ass2 taux2 salaire2 ass3 taux3 salaire3 sal_moy_tet);
     crit_collectives=1;
    run;
    %end;
    %else %if %eval(1*&nomb) EQ 0 %then %do; proc datasets nolist; delete collectives; quit; %end;
     
     
    /* Rassemblement de toutes les infos */
    data m.agence_&agent.;
     merge agence_&agent._cli
      %if %sysfunc(exist(epargne_hdg))  %then %do ; epargne_hdg %end;
      %if %sysfunc(exist(pa_retraite))  %then %do ; pa_retraite %end;
      %if %sysfunc(exist(ass_empr))     %then %do ; ass_empr    %end;
      %if %sysfunc(exist(mrh_hdg))      %then %do ; mrh_hdg     %end;
      %if %sysfunc(exist(chateau_luxe)) %then %do; chateau_luxe %end;
      %if %sysfunc(exist(bateau))       %then %do ; bateau      %end;
      %if %sysfunc(exist(cheval))       %then %do ; cheval      %end;
      %if %sysfunc(exist(bijou))        %then %do ; bijou       %end;
      %if %sysfunc(exist(multi_vehic))  %then %do ; multi_vehic %end;
      %if %sysfunc(exist(multi_pno))    %then %do ; multi_pno   %end;
      %if %sysfunc(exist(pharma))       %then %do ; pharma      %end;
      %if %sysfunc(exist(chef_ent))     %then %do ; chef_ent    %end;
      %if %sysfunc(exist(auto_luxe))    %then %do ; auto_luxe   %end;
      %if %sysfunc(exist(collectives))  %then %do ; collectives %end;
     ;
     by idgrc;
     %if %sysfunc(exist(epargne_hdg)) %then %do;
      if crit_epargne NE 1 then crit_epargne=0;
     %end;
     %if %sysfunc(exist(pa_retraite)) %then %do;
      if crit_retraite NE 1 then crit_retraite=0;
     %end;
     %if %sysfunc(exist(ass_empr)) %then %do;
      if crit_ass_empr NE 1 then crit_ass_empr=0;
     %end;
     %if %sysfunc(exist(mrh_hdg)) %then %do;
      if crit_mrh_hdg NE 1 then crit_mrh_hdg=0;
     %end;
     %if %sysfunc(exist(chateau_luxe)) %then %do;
      if crit_chateau_luxe NE 1 then crit_chateau_luxe=0;
     %end;
     %if %sysfunc(exist(bateau)) %then %do;
      if crit_bateau NE 1 then crit_bateau=0;
     %end;
     %if %sysfunc(exist(cheval)) %then %do;
      if crit_cheval NE 1 then crit_cheval=0;
     %end;
     %if %sysfunc(exist(bijou)) %then %do;
      if crit_bijou_fourrure NE 1 then crit_bijou_fourrure=0;
     %end;
     %if %sysfunc(exist(multi_vehic)) %then %do;
      if crit_multi_vehic NE 1 then crit_multi_vehic=0;
     %end;
     %if %sysfunc(exist(multi_pno)) %then %do;
      if crit_multi_pno NE 1 then crit_multi_pno=0;
     %end;
     %if %sysfunc(exist(pharma)) %then %do;
      if crit_pharma NE 1 then crit_pharma=0;
     %end;
     %if %sysfunc(exist(chef_ent)) %then %do;
      if crit_chef_ent NE 1 then crit_chef_ent=0;
     %end;
     %if %sysfunc(exist(auto_luxe)) %then %do;
      if crit_auto_luxe NE 1 then crit_auto_luxe=0;
     %end;
     %if %sysfunc(exist(collectives)) %then %do;
      if crit_collectives NE 1 then crit_collectives=0;
     %end;
    run;
     
    /* Arrangement du tableau de résultats */
    proc sql;
    create table m.agence_&agent. as select
      idgrc, tit_sj, nom_rs, prenom, anciennete, dt_nais, idtypv, batesc, lieud, codpost, ville,
      nb_contrats_sante, nb_contrats_iard, nb_contrats_vie
     %if %sysfunc(exist(epargne_hdg))  %then %do; ,crit_epargne        %end;
     %if %sysfunc(exist(pa_retraite))  %then %do; ,crit_retraite       %end;
     %if %sysfunc(exist(ass_empr))     %then %do; ,crit_ass_empr       %end;
     %if %sysfunc(exist(mrh_hdg))      %then %do; ,crit_mrh_hdg        %end;
     %if %sysfunc(exist(chateau_luxe)) %then %do; ,crit_chateau_luxe   %end;
     %if %sysfunc(exist(bateau))       %then %do; ,crit_bateau         %end;
     %if %sysfunc(exist(cheval))       %then %do; ,crit_cheval         %end;
     %if %sysfunc(exist(bijou))        %then %do; ,crit_bijou_fourrure %end;
     %if %sysfunc(exist(multi_vehic))  %then %do; ,crit_multi_vehic    %end;
     %if %sysfunc(exist(multi_pno))    %then %do; ,crit_multi_pno      %end;
     %if %sysfunc(exist(pharma))       %then %do; ,crit_pharma         %end;
     %if %sysfunc(exist(chef_ent))     %then %do; ,crit_chef_ent       %end;
     %if %sysfunc(exist(auto_luxe))    %then %do; ,crit_auto_luxe      %end;
     %if %sysfunc(exist(collectives))  %then %do; ,crit_collectives    %end;
     
     %if %sysfunc(exist(epargne_hdg)) %then %do;
      ,mtcntec
     %end;
     %if %sysfunc(exist(pa_retraite)) %then %do;
      ,mtcntret
     %end;
     %if %sysfunc(exist(ass_empr)) %then %do;
      ,mt_cap_dce
     %end;
     %if %sysfunc(exist(mrh_hdg)) %then %do;
      ,cpg_mrh, prime_mrh
     %end;
     %if %sysfunc(exist(chateau_luxe)) %then %do;
      ,cpt_chateau_luxe, prime_chateau_luxe
     %end;
     %if %sysfunc(exist(bateau)) %then %do;
      ,cpg_bateau, prime_bateau, valeur_venale_bateau, longueur_bateau
     %end;
     %if %sysfunc(exist(cheval)) %then %do;
      ,cpg_cheval, prime_cheval
     %end;
     %if %sysfunc(exist(bijou)) %then %do;
      ,cpg_bijou, prime_bijou
     %end;
     %if %sysfunc(exist(multi_vehic)) %then %do;
      ,nb_vehic, prime_vehic_totale
     %end;
     %if %sysfunc(exist(multi_pno)) %then %do;
      ,nb_pno, prime_pno_totale
     %end;
     %if %sysfunc(exist(pharma)) %then %do;
      ,cpg_pharma, prime_pharma
     %end;
     %if %sysfunc(exist(chef_ent)) %then %do;
      ,csp_pri, pcs_pri, libactpr, role, catfoyer
      %end;
     %if %sysfunc(exist(auto_luxe)) %then %do;
      ,cpg_luxe, marque_vehic, modele_vehic, groupe_vehic, classe_vehic, valeur_vehic
     %end;
     %if %sysfunc(exist(collectives)) %then %do;
      ,no_siret, raisoca, raisocb, nbcontrat, scont, dateff, reg, tetco, montantg, ass1, taux1, salaire1, ass2,
      taux2, salaire2, ass3, taux3, salaire3, sal_moy_tet
     %end;
     from m.agence_&agent.;
    quit;
    %mend etape1;
    endrsubmit;
    %macro etape2;
    proc export data=m.agence_&agent.
                outfile= "&rep.\Liste des clients.xls" dbms=excel replace;
     sheet="Agence &agent.";
    run;
    %mend etape2;
     
    rsubmit;
     %etape1;
    endrsubmit;
     %etape2;
    %mend liste_cli;
    Là ça va.

    Mais quand je faisais tout dans une macro, avec les rsubmit à l'intérieur, il ne compilait pas les macro variables &nomb.

  8. #8
    Membre à l'essai
    Femme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Octobre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études statistiques

    Informations forums :
    Inscription : Octobre 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /* EPARGNE HAUT DE GAMME*/
    rsubmit;
    proc sql noprint; select count(*) into :nomb from epargne_hdg; quit;
    %syslput nomb = &nomb.;
    %put &nomb;
    %if %eval(1*&nomb) NE 0 %then %do;
    data epargne_hdg;
     set epargne_hdg (keep=idgrc mtcntec) nobs=n;
     crit_epargne=1;
    run;
    %end;
    %if %eval(1*&nomb) EQ 0 %then %do; proc datasets nolist; delete epargne_hdg; quit; %end;
    endrsubmit;
    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
    MPRINT(LISTE_CLI):   rsubmit
    NOTE: Remote submit to UNIXGAN commencing.
    MPRINT(LISTE_CLI):  ; proc sql noprint;
    MPRINT(LISTE_CLI):   select count(*) into :nomb from epargne_hdg;
    MPRINT(LISTE_CLI):   quit;
    MLOGIC(LISTE_CLI):  %PUT &nomb
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    &nomb
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    ERREUR: Opérande caractère trouvé dans la fonction %EVAL ou condition %IF là où un opérande
            numérique est requis. La condition était : 1*&nomb
    MLOGIC(LISTE_CLI):  %La condition IF %eval(1*&nomb) NE 0 est VRAI
    ERREUR: L'exécution de la macro LISTE_CLI va s'arrêter.
    MLOGIC(LISTE_CLI):  Fin de l'exécution.
    3095   proc sql noprint;
    3096   select count(*) into :nomb from epargne_hdg;
    3097   quit;
    NOTE: PROCEDURE SQL used:
          real time           0.00 seconds
          cpu time            0.00 seconds
    NOTE: Remote submit to UNIXGAN complete.
    -----------------------------------------------

    Citation Envoyé par xav2229 Voir le message
    Salut,

    Ton server ne connais pas ta macro locale (hors du rsubmit) donc tu ne peux pas lui demander de résoudre des macro-variables

    Tu dois decouper comme tu l'a deviné si tu veux envoyer des macro-variables sur le server il y a les macros %SYSLPUT %SYSRPUT (Local, Remote)

    x
    J'ai essayé avec %SYSLPUT et %SYSRPUT mais rien n'y fait, on dirait qu'il n'a pas créé la macro du tout

    -----------------------------------------------
    AVEC un SYLPUT :

    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
    /* EPARGNE HAUT DE GAMME*/
    rsubmit;
    proc sql noprint; select count(*) into :nomb from epargne_hdg; quit;
    endrsubmit;
    %syslput nomb = &nomb.;
    rsubmit;
    %put &nomb;
    %if %eval(1*&nomb) NE 0 %then %do;
    data epargne_hdg;
     set epargne_hdg (keep=idgrc mtcntec) nobs=n;
     crit_epargne=1;
    run;
    %end;
    %if %eval(1*&nomb) EQ 0 %then %do; proc datasets nolist; delete epargne_hdg; quit; %end;
    endrsubmit;
    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
    MPRINT(LISTE_CLI):   rsubmit
    NOTE: Remote submit to UNIXGAN commencing.
    MPRINT(LISTE_CLI):  ; proc sql noprint;
    MPRINT(LISTE_CLI):   select count(*) into :nomb from epargne_hdg;
    MPRINT(LISTE_CLI):   quit;
    MPRINT(LISTE_CLI):   endrsubmit;
    3147   proc sql noprint;
    3148   select count(*) into :nomb from epargne_hdg;
    3149   quit;
    NOTE: PROCEDURE SQL used:
          real time           0.01 seconds
          cpu time            0.00 seconds
    NOTE: Remote submit to UNIXGAN complete.
    MLOGIC(LISTE_CLI):  %SYSLPUT (nom de la variable : NOMB)
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    MPRINT(LISTE_CLI):   rsubmit
    NOTE: Remote submit to UNIXGAN commencing.
    MLOGIC(LISTE_CLI):  %PUT &nomb
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    &nomb
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    ERREUR: Opérande caractère trouvé dans la fonction %EVAL ou condition %IF là où un opérande
            numérique est requis. La condition était : 1*&nomb
    MLOGIC(LISTE_CLI):  %La condition IF %eval(1*&nomb) NE 0 est VRAI
    ERREUR: L'exécution de la macro LISTE_CLI va s'arrêter.
    MPRINT(LISTE_CLI):  ;
    MLOGIC(LISTE_CLI):  Fin de l'exécution.
    NOTE: Remote submit to UNIXGAN complete.
    -----------------------------------------------
    AVEC UN SYSRPUT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /* EPARGNE HAUT DE GAMME*/
    rsubmit;
    proc sql noprint; select count(*) into :nomb from epargne_hdg; quit;
    %sysrput nomb = &nomb.;
    %put &nomb;
    %if %eval(1*&nomb) NE 0 %then %do;
    data epargne_hdg;
     set epargne_hdg (keep=idgrc mtcntec) nobs=n;
     crit_epargne=1;
    run;
    %end;
    %if %eval(1*&nomb) EQ 0 %then %do; proc datasets nolist; delete epargne_hdg; quit; %end;
    endrsubmit;
    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
    MPRINT(LISTE_CLI):   rsubmit
    NOTE: Remote submit to UNIXGAN commencing.
    MPRINT(LISTE_CLI):  ; proc sql noprint;
    MPRINT(LISTE_CLI):   select count(*) into :nomb from epargne_hdg;
    MPRINT(LISTE_CLI):   quit;
    MLOGIC(LISTE_CLI):  %SYSRPUT (le nom de la variable est NOMB)
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    ERREUR: L'instruction %SYSRPUT n'est valide que si OPTION DMR est actif.
    MLOGIC(LISTE_CLI):  %PUT &nomb
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    &nomb
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    ERREUR: Opérande caractère trouvé dans la fonction %EVAL ou condition %IF là où un opérande
            numérique est requis. La condition était : 1*&nomb
    MLOGIC(LISTE_CLI):  %La condition IF %eval(1*&nomb) NE 0 est VRAI
    ERREUR: L'exécution de la macro LISTE_CLI va s'arrêter.
    MLOGIC(LISTE_CLI):  Fin de l'exécution.
    3173   proc sql noprint;
    3174   select count(*) into :nomb from epargne_hdg;
    3175   quit;
    NOTE: PROCEDURE SQL used:
          real time           0.00 seconds
          cpu time            0.00 seconds
    NOTE: Remote submit to UNIXGAN complete.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    et ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    rsubmit;
       proc sql noprint; select count(*) into :nomb from epargne_hdg; quit;
       %sysrput nomb = &nomb.;
       %put &nomb;
    endrsubmit;
     
    %put &nomb;
    x

  10. #10
    Membre à l'essai
    Femme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Octobre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études statistiques

    Informations forums :
    Inscription : Octobre 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par xav2229 Voir le message
    et ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    rsubmit;
       proc sql noprint; select count(*) into :nomb from epargne_hdg; quit;
       %sysrput nomb = &nomb.;
       %put &nomb;
    endrsubmit;
     
    %put &nomb;
    x
    Bonjour xav2229,

    J'ai essayé ton alternative :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /* EPARGNE HAUT DE GAMME*/
    rsubmit;
       proc sql noprint; SELECT count(*) INTO :nomb FROM epargne_hdg; quit;
       %sysrput nomb = &nomb.;
       %put &nomb;
    endrsubmit;
     
    %put &nomb;

    J'obtiens :

    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
    MPRINT(LISTE_CLI):   rsubmit
    NOTE: Remote submit to UNIXGAN commencing.
    MPRINT(LISTE_CLI):  ; proc sql noprint;
    MPRINT(LISTE_CLI):   SELECT count(*) INTO :nomb FROM epargne_hdg;
    MPRINT(LISTE_CLI):   quit;
    MLOGIC(LISTE_CLI):  %SYSRPUT (le nom de la variable est NOMB)
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    ERREUR: L'instruction %SYSRPUT n'est valide que si OPTION DMR est actif.
    MLOGIC(LISTE_CLI):  %PUT &nomb
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    &nomb
    MPRINT(LISTE_CLI):   endrsubmit;
    128   proc sql noprint;
    129   SELECT count(*) INTO :nomb FROM epargne_hdg;
    130   quit;
    NOTE: PROCEDURE SQL used:
          real time           0.05 seconds
          cpu time            0.01 seconds
    
    
    NOTE: Remote submit to UNIXGAN complete.
    MLOGIC(LISTE_CLI):  %PUT &nomb
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    &nomb
    MPRINT(LISTE_CLI):   rsubmit
    NOTE: Remote submit to UNIXGAN commencing.
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    AVERTISSEMENT: Référence symbolique apparente NOMB non traitée.
    ERREUR: Opérande caractère trouvé dans la fonction %EVAL ou condition %IF là où un opérande
            numérique est requis. La condition était : 1*&nomb
    MLOGIC(LISTE_CLI):  %La condition IF %eval(1*&nomb) NE 0 est VRAI
    ERREUR: L'exécution de la macro LISTE_CLI va s'arrêter.
    MPRINT(LISTE_CLI):  ;
    MLOGIC(LISTE_CLI):  Fin de l'exécution.
    NOTE: Remote submit to UNIXGAN complete.

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    ne crée pas de macro LISTE_CLI

    lance le code tel quel

  12. #12
    Membre à l'essai
    Femme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Octobre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études statistiques

    Informations forums :
    Inscription : Octobre 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par xav2229 Voir le message
    ne crée pas de macro LISTE_CLI

    lance le code tel quel
    Re-bonjour xav2229,

    J'ai donc lancé le code tel quel, en dehors de la macro.
    J'obtiens :

    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
    63   rsubmit;
    NOTE: Remote submit to UNIXGAN commencing.
    131     proc sql noprint;
    131!                      SELECT count(*) INTO :nomb FROM
    131! epargne_hdg; quit;
    NOTE: PROCEDURE SQL used:
          real time           0.00 seconds
          cpu time            0.00 seconds
     
     
    132     %sysrput nomb = &nomb.;
    133     %put &nomb;
    0
    NOTE: Remote submit to UNIXGAN complete.
    64
    65   %put &nomb;
    SYMBOLGEN:  Variable macro NOMB traitée dans 0
    0
    En dehors de la macro ça marche bien puisque que pour cette agence, il n'y a bien aucun client en epargne_hdg donc c'est bien 0 qui soit s'afficher.

    Qu'est ce que cela veut dire ?

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    Citation Envoyé par datametric Voir le message
    le mieux est d'isoler ce qui doit partir sur UNIXGAN et ce qui doit être exécuté sur le poste.
    Exemple : une macro définie sur le serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    rSubmit mySrv;
       %macro onRemote(i=);
          %do j = 1 %to &i;
             %put &j / &i / %sysfunc(pathname(WORK, L)) ;
          %end;
       %mend onRemote;
    endRsubmit;
    Exemple : une macro définie sur le local appellant la macro definie sur le serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    %macro onLocal(limit=);
       %do i = 1 %to &limit;
          %put i = <&i>;
          %syslput i = &i;
          rSubmit mySrv;
             %onRemote(i=&i);
          endrSubmit;
       %end;
    %mend onLocal;
     
    %onLocal(limit=3);
    x

  14. #14
    Membre à l'essai
    Femme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Octobre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études statistiques

    Informations forums :
    Inscription : Octobre 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par xav2229 Voir le message
    Exemple : une macro définie sur le serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    rSubmit mySrv;
       %macro onRemote(i=);
          %do j = 1 %to &i;
             %put &j / &i / %sysfunc(pathname(WORK, L)) ;
          %end;
       %mend onRemote;
    endRsubmit;
    Exemple : une macro définie sur le local appellant la macro definie sur le serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    %macro onLocal(limit=);
       %do i = 1 %to &limit;
          %put i = <&i>;
          %syslput i = &i;
          rSubmit mySrv;
             %onRemote(i=&i);
          endrSubmit;
       %end;
    %mend onLocal;
     
    %onLocal(limit=3);
    x
    Je suis désolée je n'ai pas trop compris les instructions à l'intérieur des macros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    %do j = 1 %to &i;
     %put &j / &i / %sysfunc(pathname(WORK, L)) ;
    %end;
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    %do i = 1 %to &limit;
      %put i = <&i>;
      %syslput i = &i;
    C'est un exemple au hasard ou dois-je reprendre ces instructions ?

    Sinon c'est ce que je fais dans le message 7 je crois, seulement, c'est quand même bizarre cette histoire de macrovariable qu'il ne comprend pas, quoi que je fasse.

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    Citation Envoyé par Laurinette57 Voir le message
    C'est un exemple au hasard ou dois-je reprendre ces instructions ?

    c'est un exemple qui doit fonctionner
    ainsi tu le fais marcher
    puis tu modifies un peu pour comprendre et trouver ta solution

    xav

  16. #16
    Membre à l'essai
    Femme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Octobre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études statistiques

    Informations forums :
    Inscription : Octobre 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par xav2229 Voir le message
    c'est un exemple qui doit fonctionner
    ainsi tu le fais marcher
    puis tu modifies un peu pour comprendre et trouver ta solution

    xav

    D'accord.

    Merci beaucoup pour ton aide xav.

Discussions similaires

  1. import de macros sous SAS/CONNECT
    Par PhYx dans le forum Macro
    Réponses: 3
    Dernier message: 02/10/2009, 12h55
  2. Réponses: 6
    Dernier message: 27/02/2009, 09h03
  3. [Macro] Différences entre SAS et SQL+
    Par sousou371 dans le forum Macro
    Réponses: 3
    Dernier message: 15/09/2008, 18h19
  4. [VB .Net][Forms] Interaction entre deux forms
    Par plasticgoat dans le forum Windows Forms
    Réponses: 7
    Dernier message: 24/08/2005, 13h14
  5. [Collaboration/Interaction] Peut-on schématiser une interaction entre un bouton de commande et un autre objet ?
    Par manel007 dans le forum Autres Diagrammes
    Réponses: 5
    Dernier message: 21/09/2004, 01h01

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