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 :

Lancer une macro SAS depuis vba


Sujet :

Macro

  1. #1
    Membre du Club
    Homme Profil pro
    statisticien
    Inscrit en
    Juin 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : statisticien
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2017
    Messages : 54
    Points : 46
    Points
    46
    Par défaut Lancer une macro SAS depuis vba
    Bonjour à tous,

    Je souhaiterai lancer un programme SAS contenant une macro et donc des variables depuis des programmes VBA sous Access.

    Pour vous donner une idée mon programme sas ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    %macro erreur(annee,region);
    proc sql;
    select nom_variable
    from ma_table
    where year(datepart(date)) = &annee and etab_region = &region;
    quit;
    %erreur()
    J'ai vu deux méthodes pour exécuter sas via vba mais pour aucune des deux je n'arrive à paramétrer l'année et la région.

    1ère méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim SAS As Object
    Dim fichier As String
    Set SAS = CreateObject("SAS.application")
    SAS.Visible = True
    SAS.Wait = True
    fichier = "'Mon_prgm.sas'"
    SAS.submit ("Filename in_src '" + fichier+ "';")
    SAS.submit ("run;")
    2ème méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    execution = """C:\Program Files\SASHome\SASFoundation\9.4\sas.exe"""
        execution = execution & "-sysin """ + "Mon_prgm.sas"""
        Shell (execution)
    Laquelle est la plus adaptée pour un lancement avec paramètre et quelles sont les options à ajouter.
    Merci de votre aide.

  2. #2
    Membre du Club
    Homme Profil pro
    statisticien
    Inscrit en
    Juin 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : statisticien
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2017
    Messages : 54
    Points : 46
    Points
    46
    Par défaut
    J'ai trouvé une solution à mon problème, il doit surement y avoir plus simple mais dans l'éventualité que ca puisse servir à quelqu'un je mets le code et la procédure utilisée ci dessous.

    1) Je créé un fichier texte contenant les variables et leurs valeurs en VBA Access puis je lance le programme SAS souhaité avec le fichier .txt en paramètre :
    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
    Option Compare Database
     
    Private Sub test()
     
        Dim region As String
        Dim annee As String
        Dim dossier_test As String
     
        region = "'Corse'"
        annee = "'2017','2018'"
        dossier_test = "C:\Users\Util\Desktop\Test pour programme\test"
     
        strsysparm = "$Region@@ " & region & "$Annee@@ " & annee
     
        Open CStr(dossier_test) & ".txt" For Output As #1
           Print #1, CStr(strsysparm)
        Close #1
     
        execution = ""
        execution = """C:\Program Files\SASHome\SASFoundation\9.4\sas.exe"""
        execution = execution & "-sysin """ + CStr(dossier_test) + "2.sas"""
        execution = execution & "-log """ + CStr(dossier_test) + ".log"""
        execution = execution & "-sysparm ""@@" & CStr(dossier_test) + ".txt"""
     
        Shell (execution)
     
    End Sub
    2) J'ai créé un premier programme SAS contenant la requête souhaitée et qui fait appel à un second programme qui récupère les infos du fichier texte :
    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
    libname test "C:\Users\Util\Desktop\Test pour programme";
     
    proc import datafile="C:\Users\Util\Desktop\Test pour programme\Données test.xlsx"
    out=base
    dbms=xlsx
    replace;
    getname=yes;
    run;
     
    %include "C:\Users\Util\Desktop\Test pour programme\test.sas";
     
    proc sql;
    	create table test.final as
    	select count(patient)
    	from base
    	where annee in (&annee) and region in (&region);
    quit;
    run;
    3) Si dessous le programme permettant de récupérer les infos stockées dans le fichier texte :
    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
    %macro test ();
     
    	libname test "C:\Users\Util\Desktop\Test pour programme";
    	filename sasref "%scan(&sysparm,1,@)";
     
    	data test.param;
    	    infile sasref length=reclen lrecl=32767 ;
    		input  param $varying32767. reclen ;
    		n=0;
    		do i=1 to reclen;
    			if substr(param,i,1)="$" then n=n+1;
    		end;
    		format var $255. contenu $10000.;
    		do j=1 to n;
    			var=scan(scan(param,j,"$"),1,"@");
    			contenu=scan(scan(param,j,"$"),2,"@");
    			output;
    		end;
    		n=_n_;
    	run;
     
    	proc sql noprint;
    		create table test.temp as
    		select *
    		from test.param;
     
    		%let nb=&sqlobs;
     
    		select var into:var1-:var&nb
    		from test.param;
     
    		select contenu into:contenu1-:contenu&nb
    		from test.param;
    	quit;
     
    	%do i=1 %to &nb;
    		%global &&var&i;
    		%put &&var&i = &&contenu&i;
    	%end;
     
    	data test.param;
    		set test.param;
    		call symput(left(trim(var)),left(trim(contenu)));
    	run;
     
    %mend;
    %test;

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

Discussions similaires

  1. Lancer une macro access depuis sas
    Par mamax49 dans le forum Macro
    Réponses: 1
    Dernier message: 06/02/2014, 19h58
  2. Lancer une macro excel depuis une macro powerpoint
    Par toma65 dans le forum VBA PowerPoint
    Réponses: 7
    Dernier message: 12/06/2007, 10h41
  3. lancer une macro excel depuis une appli access
    Par LostIN dans le forum Access
    Réponses: 1
    Dernier message: 22/08/2006, 12h10
  4. Lancer une macro Excel depuis Access
    Par pascal913 dans le forum Access
    Réponses: 12
    Dernier message: 31/07/2006, 16h31
  5. Lancer une macro Excel depuis Access
    Par marcobosio dans le forum Access
    Réponses: 6
    Dernier message: 05/06/2006, 21h51

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