SAS et VB

So -  
caloo Messages postés 15 Statut Membre -
Peut on convertir un programme SAS en Visual Basic?
Les fonctions utilisees dans SAS existent elles pour VB ?

21 réponses

  • 1
  • 2
  1. maily Messages postés 7560 Statut Contributeur 453
     
    Bonjour!

    Franchement, je pense pas que tu puisses convertir! SAS utilise tellement des fonctions spécifiques aux stats!!
    Je ne suis pas experte, mais je pense sincèrement que non!

    Bon courage

    Maily   :-))))
    0
  2. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
     
    A moins qu'iul existe un module specifique sur le net...

    .  .
    \_/
    0
  3. Profil bloqué
     
    tu ne peux pas convertir un prog SAS en VB, car SAS utilise un langage propre à lui, proche de ADA.
    toutefois, tu peux réecrire les instructions simple en VB
    mais pour les commandes et instructiuons complexes tu ne peux par, car VB ne les connait pas, donc tu dois, par exemple, déclarer à nouveaux toutes les étapes d'une régression ou d'une analyse statistiques simple.

    pour plus d'informations tu peux poser ta question directement sur www.sas.com

    time is not money, time is life
    0
    1. Elead
       
      SAS est un langage de 4è generation (sql c'est 3e generation)
      donc il n'y a pas possibilité (ni d'interet) de le convertir en vb...


      Par contre il me semble qu'il est possible de lancer une session sas en vb et donc d'executer des pgm sas...

      J'ai pas la solution en tete mais jette un coup d'oeil sur www.sas.com ou http://support.sas.com/
      0
  4. marine
     
    bonjour,

    j'ai un problème...
    j'ai un fichier sas avec l'extension sas7bcat. J'ai mis ouvrir avec The SAS System for Windows et ça ne marche pas du tout. L'icône du fichier a changé de présentation, je n'ai plus le dossier avec le point rouge maisune feuille blanche avec marqué sas dessus.
    HELP...
    0
    1. Elead
       
      Salut marine!

      Ce fichier est en fait un catalogue sas.
      Pour voir ce qu'il y a dedans il faut
      - ouvrir une session sas
      - faire un libname vers le repertoire contenant le catalogue (ex. : libname malib "c.\temp" ;)
      - double cliquer dans l'explorateur sur malib (ou n'importe quel autre nom que tu aurais pu utiliser)...

      J'espere que ça aidera....
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. random
     
    il existe un obdc sas access
    tu lies tes tables sas sous access et tu les traites ensuite avec les fonctions vb et vba
    jamais essayé mais ca doit marcher
    0
  7. saimanes Messages postés 5 Statut Membre
     
    bjr!
    si tu trouves aussi comment adapter une base de donnée en fonction des changements de la base de donnée par exemple pour un questionaire veuillez m aider.
    0
  8. caloo Messages postés 15 Statut Membre
     
    Salut

    J'ai besoin de convertir une macro SAS en macro BV excel

    toute info serait bien venue

    merci d'avance
    0
  9. steelspirit
     
    Salut,

    Comme expliqué précédemment, tu ne peux pas convertir des macros SAS en macro VB Excel. En SAS, Le langage Macro est un langage propriétaire compilé qui est une surcouche du langage SAS/BASE.

    Cependant, tu peux controler Excel à partir de SAS via le DDE : http://v8doc.sas.com/sashtml/win/dde.htm
    Avec cette même méthode, tu peux également exécuter des macros VB : https://support.sas.com/resources/papers/proceedings/proceedings/sugi25/25/cc/25p098.pdf

    SteelSpirit
    0
  10. caloo
     
    Merci

    En fait le but 'in fine' est d'arriver à ce
    passer de SAS en adaptant une macro sas
    en macro excel. Vu que la macro n'est pas d'une
    complexité énorme, je pense que c'est faisable,
    mais comment ?
    0
  11. steelspirit
     
    Dans ce cas, vu que la macro SAS n'est pas compliquée, tu prends une feuille blanche, tu écris l'algorithme puis tu créés ta macro VB ;-)

    Steel

    PS: Si tu peux me montrer la macro SAS je pourrais t'aider ...
    0
    1. caloo
       
      salut

      c'est sympas de ta part

      vu que je suis novice en programmation
      j'ai encore un peu de mal

      merci de voir ce que tu peut faire

      comme je te disai, c'est pas tres complexe
      il s'agit juste de récuperer les infos d'un tableau
      excel en csv et de les ordonner d'une façon différente
      dans un autre fichier csv
      mais moi je pense qu'on peut traiter
      ça directement sans passer par csv

      ces données une fois traiter doivent subir
      des calcul défini dans une autre macro.
      Ces calculs sont lancé grace a une boucle que j'ai
      écris. Si tu veux je peux te la monter aussi
      mais celle-ci tourne pas trop mal

      merci d'avance pour ton aide
      n'esites pas a me contacter si tu as
      besoin de précisions

      PJ

      ____________________________________


      options ps=60 ls=80;
      data a;
      infile "G:\f-renoutet\_Sfrp2SPOT\cembrzyn\ACI\X91-2RD-a4.csv" firstobs=6 dlm=";" lrecl=5000;
      length cordon $8 vue $1 classe $4 config $4 ;
      array v cordon vue classe config;
      input cordon
      vue
      op
      classe
      config
      ep1
      ep2
      l1 l1_ l2 l2_ p1 p1_ p2 p2_ a a_ b b_;
      do over v;
      v=compress(v);
      end;
      run;

      data d;
      infile "G:\f-renoutet\_Sfrp2SPOT\cembrzyn\ACI\X91-2RD-a4.csv" firstobs=2 obs=2 dlm=";" lrecl=5000;
      length chaine $200 ;
      input chaine;
      chaine = compress(upcase(chaine));
      if index(chaine,upcase("essai:")) ne 0 then do;
      ncar = index(chaine,upcase("essai:"))+length("essai:"); * chemin ;
      essai = input(substr(chaine,ncar,1),1.);
      end;
      if index(chaine,upcase("essai")) ne 0 then do;
      ncar = index(chaine,upcase("essai"))+length("essai"); * chemin ;
      essai = input(substr(chaine,ncar,1),1.);
      end;
      else if index(chaine,upcase("chemin")) ne 0 then do;
      ncar = index(chaine,upcase("chemin"))+length("chemin");
      essai = input(substr(chaine,ncar,1),1.);
      end;
      else do;
      essai = 1;
      end;
      *;
      if index(chaine,upcase("jour")) ne 0 then do;
      ncar = index(chaine,upcase("jour"))+length("jour"); * jour de collecte *;
      rafale = input(substr(chaine,ncar,4),4.);
      end;
      else if index(chaine,upcase("s")) ne 0 then do;
      ncar = index(chaine,upcase("s"))+length("s");
      rafale = input(substr(chaine,ncar,4),4.);
      end;
      else do;
      rafale = 1;
      end;
      *keep essai rafale;
      run;
      proc print;run;
      %let essai=;
      %let rafale=;
      data _null_;
      set d(obs=1);
      call symput("essai",compress(put(essai,8.)));
      call symput("rafale",compress(put(rafale,8.)));
      run;
      %let essai=%eval(&essai);
      %let rafale=%eval(&rafale);
      %put numero d essai &essai numero de jour de prelevement (rafale) &rafale;
      data pe;
      ************************************;
      * lecture du PE echantillonage 2RD *;
      * rappel OP120 = OP100 *;
      ************************************;
      input T_OP105 T_OP110 T_OP120 T_OP130 T_OP140 T_OP150 T_OP160;
      ESSAI = _n_;
      rafale= &rafale;
      chemin= 1;
      ligne = 1;
      cards;
      1 1 1 1 1 1 1
      2 2 1 1 2 1 2
      2 1 2 2 2 2 1
      1 2 2 2 1 2 2
      ;
      run;
      %put &essai;
      data chemin;
      set pe(obs=&essai firstobs=&essai);
      run;
      proc sort data=chemin;
      by rafale;
      run;
      *;
      data b;
      set a;
      length classe_ $4 ;
      retain cordon_ classe_ op_ l1_lit l2_lit a_lit b_lst;
      *;
      array sp l1_lit l2_lit a_lit b_lst;
      array me l1 l2 a b;
      *;
      if (compress(cordon) ne compress(" ")) and (compress(vue) eq compress(" ")) then do;
      cordon_ = input(substr(cordon,2),3.);
      if cordon_ eq 311 then cordon_ = 131;
      else if cordon_ eq 321 then cordon_ = 132;
      classe_ = classe;
      l1_lit = l1_; * lsl l1 ;
      l2_lit = l2_; * lsl l2 ;
      a_lit = a_; * lsl a ;
      b_lst = b_; * usl b ;
      *;
      op_ = op;
      dmf = .;
      end;
      else if (compress(cordon) eq compress(" ")) and (compress(vue) ne compress(" ")) then do;
      dmf = index(upcase("DMF"),upcase(vue)) ;

      erreur = 0; * erreur sur les 4 mesures *;
      if (abs(l1) le 1.E-07) and
      (abs(l2) le 1.E-07) and
      (abs(a) le 1.E-07) and
      (abs(b) le 1.E-07) then erreur = 1;
      *;
      do over me;
      ********** adaptation donnees M. Jacquot *;
      if (abs(sp) gt 1.E-07) and (erreur ne 1) then do;
      me = me / sp; * normalisation des mesures par rapport à lsl/usl avec tol = 1*;
      end;
      else do;
      me = .;
      end;
      end;
      rafale = &rafale;
      rep = l1;
      output;
      end;
      keep l1 l2 a b op_ dmf cordon_ l1_lit l2_lit a_lit b_lst rafale rep ;
      rename cordon_ = cordon op_ = op;
      run;
      proc sort data=b;
      by rafale cordon dmf;
      run;
      proc summary data=b;
      by rafale cordon;
      output out=c(keep=_freq_ rafale cordon rename=(_freq_=n)) ;
      run;
      proc format;
      value dmf
      1 = 'D'
      2 = 'M'
      3 = 'F'
      ;
      run;

      data b;
      merge b c;
      by rafale cordon;
      length cordon_ $6;
      if n > 1 then do;
      cordon_ = upcase(compress(put(cordon,4.)||put(dmf,dmf.)));
      end;
      else do;
      cordon_ = compress(put(cordon,4.));
      end;
      drop cordon ;
      rename cordon_ = cordon;
      run;
      data c;
      merge chemin b;
      by rafale;
      run;
      proc sort data=c;
      by ligne cordon rafale dmf essai;
      run;
      data _null_;
      set c;
      array v _numeric_;
      file "G:\f-renoutet\_Sfrp2SPOT\cembrzyn\ACI\X91-2RD-essai&essai..csv" lrecl=3000 ;
      if _n_ eq 1 then do;
      put "ligne;cordon;rafale;dmf;T_OP105;T_OP110;T_OP120;T_OP130;T_OP140;T_OP150;T_OP160;chemin;REP;essai;"
      "l1;l2;a;b;l1_lit;l2_lit;a_lit;b_lst;";
      end;
      do over v;
      if v eq . then v=-999999; * remplacement code donnee manquante *;
      end;
      cordon=compress(cordon);
      if length(cordon) = 1 then do;
      put ligne best7. ";"
      cordon $1. ";"
      rafale best7. ";"
      dmf best7. ";"
      T_OP105 best7. ";"
      T_OP110 best7. ";"
      T_OP120 best7. ";"
      T_OP130 best7. ";"
      T_OP140 best7. ";"
      T_OP150 best7. ";"
      T_OP160 best7. ";"
      chemin best7. ";"
      REP best7. ";"
      essai best7. ";"
      l1 best7. ";"
      l2 best7. ";"
      a best7. ";"
      b best7. ";"
      l1_lit best7. ";"
      l2_lit best7. ";"
      a_lit best7. ";"
      b_lst best7. ";" ;
      end;
      if length(cordon) = 2 then do;
      put ligne best7. ";"
      cordon $2. ";"
      rafale best7. ";"
      dmf best7. ";"
      T_OP105 best7. ";"
      T_OP110 best7. ";"
      T_OP120 best7. ";"
      T_OP130 best7. ";"
      T_OP140 best7. ";"
      T_OP150 best7. ";"
      T_OP160 best7. ";"
      chemin best7. ";"
      REP best7. ";"
      essai best7. ";"
      l1 best7. ";"
      l2 best7. ";"
      a best7. ";"
      b best7. ";"
      l1_lit best7. ";"
      l2_lit best7. ";"
      a_lit best7. ";"
      b_lst best7. ";" ;
      end;
      if length(cordon) = 3 then do;
      put ligne best7. ";"
      cordon $3. ";"
      rafale best7. ";"
      dmf best7. ";"
      T_OP105 best7. ";"
      T_OP110 best7. ";"
      T_OP120 best7. ";"
      T_OP130 best7. ";"
      T_OP140 best7. ";"
      T_OP150 best7. ";"
      T_OP160 best7. ";"
      chemin best7. ";"
      REP best7. ";"
      essai best7. ";"
      l1 best7. ";"
      l2 best7. ";"
      a best7. ";"
      b best7. ";"
      l1_lit best7. ";"
      l2_lit best7. ";"
      a_lit best7. ";"
      b_lst best7. ";" ;
      end;
      if length(cordon) = 4 then do;
      put ligne best7. ";"
      cordon $4. ";"
      rafale best7. ";"
      dmf best7. ";"
      T_OP105 best7. ";"
      T_OP110 best7. ";"
      T_OP120 best7. ";"
      T_OP130 best7. ";"
      T_OP140 best7. ";"
      T_OP150 best7. ";"
      T_OP160 best7. ";"
      chemin best7. ";"
      REP best7. ";"
      essai best7. ";"
      l1 best7. ";"
      l2 best7. ";"
      a best7. ";"
      b best7. ";"
      l1_lit best7. ";"
      l2_lit best7. ";"
      a_lit best7. ";"
      b_lst best7. ";" ;
      end;
      if length(cordon) = 5 then do;
      put ligne best7. ";"
      cordon $5. ";"
      rafale best7. ";"
      dmf best7. ";"
      T_OP105 best7. ";"
      T_OP110 best7. ";"
      T_OP120 best7. ";"
      T_OP130 best7. ";"
      T_OP140 best7. ";"
      T_OP150 best7. ";"
      T_OP160 best7. ";"
      chemin best7. ";"
      REP best7. ";"
      essai best7. ";"
      l1 best7. ";"
      l2 best7. ";"
      a best7. ";"
      b best7. ";"
      l1_lit best7. ";"
      l2_lit best7. ";"
      a_lit best7. ";"
      b_lst best7. ";" ;
      end;
      run;
      _________________________________
      0
      1. steelspirit Messages postés 275 Date d'inscription   Statut Membre 80 > caloo
         
        Ta macro me donne envie de pleurer ... y a rien d'optimisé, c'est une vraie porcherie, la moitié du code ne sert à rien ;-)

        Bon je vais déja te donner l'algorithme simplifié, si j'ai le temps je ferai la macro VB après mais tu peux déja y réfléchir ... le mieux est surement de faire une feuille par table.

        Table A :
                création des variables cordon, vue, op, classe ...
                importation du fichier G:\f-renoutet\_Sfrp2SPOT\cembrzyn\ACI\X91-2RD-a4.csv à partir de la ligne 6
                
        Table D :
                création de 2 macro-variables : essai et rafale comportant des données extraites à la ligne 2 du fichier
        
        Supposons que essai=2 et rafale=2 (par exemple)
        
        Table PE  :
                essai      rafale         chemin      ligne      T_OP105      T_OP110       T_OP120       T_OP130       T_OP140       T_OP150        T_OP160
                    1        2            1          1              1              1              1              1              1              1             1
                    2        2            1          1              2              2              1              1              2              1             2
                    3        2            1          1              2              1              2              2              2              2             1
                    4        2            1          1              1              2              2              2              1              2             2
         
         Table CHEMIN : lecture de PE firstobs=2 obs=2
                    2        2            1          1              2              2              1              1              2              1             2
        
        Table B :
                lecture de la table A
                Si cordon renseigné et vue est vide alors
                        Si cordon=311 alors cordon=131
                        Si cordon=321 alors cordon=132
                sinon Si cordon est vide et vue renseigné alors
                        DMF=index("DMF",upcase(vue)
                        erreur=0
                        Si abs(l1)<=1.E-7 et abs(l2)<=1.E-7 etc... alors erreur=1
                        /*Do over me ... end --> sert a rien car me=.*/
                        rafale=2
                        rep=l1
                fin si
        
        Comptage des ligne (freq) par rafale, cordon
        
        Table C : Merge de Table CHEMIN et B par rafale


        0
  12. Gadron
     
    Bonjour,

    J’ai un tableau programmer en HTML. Ce tableau contient des éléments fixes et des éléments variables.

    Je veux que les éléments variables soient téléchargés à partir du résultat SAS que j’obtiens.

    Je vous soumets donc les questions suivantes.

    1/ Est-il possible de programme en HTML sur SAS pour avoir une « output sur mesure » (sans passer par la proc template) ?

    2/ Est-il possible de stockés un fichier HTML dans SAS et que celui-ci ne remplisse que les champs voulus ?
    0
  13. steelspirit Messages postés 275 Date d'inscription   Statut Membre 80
     
    Il suffit de faire de l'ODS HTML

    dans google recherche : sas ods html

    Steel
    0
  14. steelspirit Messages postés 275 Date d'inscription   Statut Membre 80
     
    -
    0
  15. caloo Messages postés 15 Statut Membre
     
    OK

    c'est vrais que la moitier ne sert a rien ! lol

    merci pour ton aide
    je suis a fond dedans !

    A+
    0
  16. caloo Messages postés 15 Statut Membre
     
    help !

    j'y arrive pas :-(
    0
  17. steelspirit Messages postés 275 Date d'inscription   Statut Membre 80
     
    Je t'ai envoyé un message privé, comme ton problème est tres spécifique et pour ne pas encombrer le forum, il vaut meiux que nous communiquions par mail.
    Steel
    0
  18. caloo Messages postés 15 Statut Membre
     
    tu me l'as envoyé sur quoi ? mail ? pm ?
    je ne vois rien !
    0
  19. steelspirit Messages postés 275 Date d'inscription   Statut Membre 80
     
    Par message privé, Regarde tout en haut a droite de cette page, tu dois trouver une petite enveloppe avec marqué 1 nouveau message...
    0
  20. caloo Messages postés 15 Statut Membre
     
    pour info a tout le monde
    le systeme des message privé a un probleme
    steelspirit m'a laissé un message, mais ça n'apparait pas
    en haut a droite (0 nouveau(x) message(s)) !!!
    alors que quand je clique dessus je vais dans ma boite
    et je vois un message...
    0
  21. caloo Messages postés 15 Statut Membre
     
    salut !

    pour revenir a sas

    j''aurai une petite question :

    ça veut dire quoi : "call symput("essai",compress(put(essai,8.)));" ?

    merci
    0
  • 1
  • 2