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 :

Automatisation d'une macro sas


Sujet :

Macro

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 3
    Par défaut Automatisation d'une macro sas
    Bonjour, je suis nouveau mais lecteur assidu de ce forum.

    J'ai un problème avec une macro et l'automatisation de celle-ci, c'est la macro %readhtml qui lit les tables d'une URL et en sort tous les tableaux,
    je veux l'automatiser pour plusieurs url dont seulement un caractère différe.

    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    %readhtm(url);
    /* son code */
    %mend readhtml;
    /* Puis je fais */
    data _null_;
    set t_secteur;
    array c(*) _all_ ;
    do k=1 to dim(c);
    call execute(%readhtml('http://mon_url/fiche||strip(c(k))||.html'));
    run;
    sachant que c(k) parcourt une ligne (la table t_secteur provient d'un proc transpose...)

    Mais seulement le code ne marche pas, je n'arrive pas à automatiser le tout.
    J'ai vu la proc fcmp mais je ne vois pas comment l'adapter.

    Le code %readhtml est d'un certain rick langston et j'ai en erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    NOTE: Ligne générée par la macro appelée "READHTML".
    1    filename urltext url &url. ; filename myfile temp;
                  -------
                  388
                  76
     
    ERROR 388-185: Opérateur arithmétique requis.
     
    ERROR 76-322: Erreur de syntaxe ; l'instruction sera ignorée.
     
    NOTE: Le Système SAS a interrompu le traitement de cette étape en raison d'erreurs.
    NOTE: L'étape DATA a utilisé (Durée totale du traitement) :
          temps réel          0.01 secondes
          temps UC            0.01 secondes
    Pouvez-vous m'aider? Merci...

  2. #2
    Membre émérite
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Par défaut
    Bonjour Perel,
    Le problème vient de ton call execute qui n'est pas correct : call execute attend une chaine de caractère en argument.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    call execute("%readhtml('http://mon_url/fiche"||strip(c(k))||".html'"));
    Attention a bien reconstituer la chaine que tu attend en paramètre de readhtml : faut-il des quotes ? Mets t'on /fiche ou /fiche/ ?

    Essaie tout d'abord de faire un appel simple (en dehors d'une étape data) de la macro readhtml pour voir si ça marche.

    Bon courage,
    Steel

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 3
    Par défaut
    Oui steelspirit, j'ai mis mon code hors d'une étape data et il fonctionne, du coup je me suis penché vers une proc iml pour utiliser un vecteur ligne de valeurs mais ça fonctionne encore moins.
    Je crois qu'on ne peut pas passer un paramètre dans une macro de ce genre (ce serait logique) du coup je vais voir si je peux changer la macro et faire des rajouts dans celle-ci pour qu'elle accepte un paramètre mais le problème vient du fait que la macro readhtml veux une url en paramètre....

    Ca en devient confus

  4. #4
    Membre éprouvé
    Inscrit en
    Juillet 2010
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 199
    Par défaut
    Bonjour,

    En mettant toutes tes url dans une variables tu peux lancer ton call execute sur cette variable.
    Dans l'idée un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    PROC SUMMARY DATA=SASHELP.class NWAY ;
    	VAR height ;
    	CLASS SEX;
    	OUTPUT OUT=S(DROP=_TYPE_ _FREQ_) ;
    RUN;
    DATA liens;
    	SET S;
    	LENGTH url $ 255 ;
    	url='"http://mon_url/fiche'||STRIP(sex)||STRIP(PUT(ROUND(height),8.))||'.html"';
    RUN;
    DATA _NULL_ ;
    	SET liens ;
    	CALL EXECUTE("FILENAME urltext url "!!TRIM(url)!!" ;") ;
    RUN ;

Discussions similaires

  1. Renommer des variables avec une macro SAS
    Par zellinho dans le forum Macro
    Réponses: 15
    Dernier message: 21/03/2011, 17h57
  2. Automatisation d'une macro VBA Access
    Par fbourdon dans le forum IHM
    Réponses: 1
    Dernier message: 26/11/2009, 17h40
  3. [Macro] %do dans une macro sas
    Par malikoo dans le forum Macro
    Réponses: 7
    Dernier message: 25/08/2008, 17h17
  4. Automatisation d'une macro existante
    Par Benoit02 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/08/2007, 22h29

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