SAS et VB

Fermé
So - 8 juil. 2003 à 17:56
caloo Messages postés 15 Date d'inscription mardi 11 décembre 2007 Statut Membre Dernière intervention 20 mars 2008 - 5 mars 2008 à 09:47
Peut on convertir un programme SAS en Visual Basic?
Les fonctions utilisees dans SAS existent elles pour VB ?
A voir également:

21 réponses

maily Messages postés 7556 Date d'inscription lundi 26 juin 2000 Statut Contributeur Dernière intervention 23 juin 2023 453
9 juil. 2003 à 11:36
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
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
9 juil. 2003 à 12:07
A moins qu'iul existe un module specifique sur le net...

.  .
\_/
0
Profil bloqué
9 juil. 2003 à 14:38
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
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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
saimanes Messages postés 5 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 2 mai 2007
24 avril 2007 à 17:54
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
caloo Messages postés 15 Date d'inscription mardi 11 décembre 2007 Statut Membre Dernière intervention 20 mars 2008
11 déc. 2007 à 14:53
Salut

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

toute info serait bien venue

merci d'avance
0
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
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
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
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
steelspirit Messages postés 277 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 22 octobre 2008 80 > caloo
18 déc. 2007 à 18:27
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
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
steelspirit Messages postés 277 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 22 octobre 2008 80
14 déc. 2007 à 14:19
Il suffit de faire de l'ODS HTML

dans google recherche : sas ods html

Steel
0
steelspirit Messages postés 277 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 22 octobre 2008 80
18 déc. 2007 à 18:25
-
0
caloo Messages postés 15 Date d'inscription mardi 11 décembre 2007 Statut Membre Dernière intervention 20 mars 2008
19 déc. 2007 à 09:51
OK

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

merci pour ton aide
je suis a fond dedans !

A+
0
caloo Messages postés 15 Date d'inscription mardi 11 décembre 2007 Statut Membre Dernière intervention 20 mars 2008
7 janv. 2008 à 16:46
help !

j'y arrive pas :-(
0
steelspirit Messages postés 277 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 22 octobre 2008 80
7 janv. 2008 à 18:07
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
caloo Messages postés 15 Date d'inscription mardi 11 décembre 2007 Statut Membre Dernière intervention 20 mars 2008
8 janv. 2008 à 09:14
tu me l'as envoyé sur quoi ? mail ? pm ?
je ne vois rien !
0
steelspirit Messages postés 277 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 22 octobre 2008 80
8 janv. 2008 à 09:57
Par message privé, Regarde tout en haut a droite de cette page, tu dois trouver une petite enveloppe avec marqué 1 nouveau message...
0
caloo Messages postés 15 Date d'inscription mardi 11 décembre 2007 Statut Membre Dernière intervention 20 mars 2008
17 janv. 2008 à 09:27
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
caloo Messages postés 15 Date d'inscription mardi 11 décembre 2007 Statut Membre Dernière intervention 20 mars 2008
4 févr. 2008 à 10:48
salut !

pour revenir a sas

j''aurai une petite question :

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

merci
0