Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Cette F.A.Q., qui traite de tout type de questions portant sur l'outil SAS,
a été réalisée à partir des contributions des membres des forums sas de
developpez.com en vue de répondre à des questions fréquemment posées
par les utilisateurs et grâce à SAS France qui a bien voulu nous donner accès
à ses sources.
-3-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
-4-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
SAS permet la gestion du système d'informations, la saisie, la gestion et interrogation de données, l'analyse
statistique et le reporting.
SAS 9.3
SAS 9.2
SAS 9.1.3
SAS 9.1.2
SAS 9.1
-5-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
data _null_;
call sound(400,200);
run;
-6-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
• l'option "nonotes" permet de supprimer les notes SAS dans la log. Les messages d'alertes
(Warning) et les erreurs seront toujours visibles ;
• l'option "nosource" permet de ne pas afficher dans la log le code exécuté ;
• l'option "noechoauto" permet de ne pas afficher dans la log le résultat de l'exécution d'un fichier
autoexec.sas.
Pour obtenir la liste complète des options concernant la LOG, vous pouvez exécuter ceci :
data sample;
input code 3. ;
cards;
1
1
2
;
run;
/* le code suivant sera sauvegardé dans la bibliothèque STORED et aura pour nom SAMPLE */
/
* Ensuite, pour exécuter ce programme, sans faire apparaître le code dans la log, vous pouvez exécuter le code s
data pgm=stored.sample;
execute;
-7-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
run;
Est-il possible de modifier le nombre de lignes maximum écrites dans les fenêtres
Log et Output ? Ceci afin d'éviter l'ouverture d'une fenêtre indiquant « Window Full ».
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
En SAS 9, les options DMSOUTSIZE (pour l'output) et DMSLOGSIZE (pour la log) permettent de modifier le
nombre de lignes affichées avec un minimum de 500 lignes et un maximum de 999 999 lignes.
Ces options sont positionnables dans le fichier de configuration de SAS ou à l'invocation de SAS.
• Pour l'impression, aller dans le menu fichier >> Définir impression >> Police
• De préférence, veuillez sélectionner la police SAS Monospace.
Pour l'affichage, aller dans le menu Outils >> Options >> Police
Comment effacer la log depuis un programme SAS (depuis la fenêtre Program Editor) ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
L'instruction suivante permet d'effacer le contenu de la log SAS :
-8-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
-9-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
/*commentaires*/
Comment afficher le résultat de mon tableau (programme) dans la fenêtre de sortie SAS ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
Faire un programme... c'est bien. Voir les résultats... c'est mieux !
Nous allons répondre à travers un petit programme :
DATA equipe;
INPUT nom$ anneecreation nbjoueur;
CARDS;
sharks 1950 12
tigers 1951 33
lions 2000 42
zodiac 2006 11
flyers 2007 42
;
RUN;
PROC PRINT DATA=equipe;
RUN;
PROC PRINT est une procédure qui permet d'afficher le résultat en sortie, plus particulièrement le dernier
tableau créé.
Si vous souhaitez que vos sorties soient séparées par une ligne de "/". Bien entendu, il est possible de
mettre un tout autre caractère à la place.
- 10 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Options number=0;
pour l'activer :
Options number=1;
• NONUMBER
pour l'activer :
• NUMBER
- 11 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
proc setinit;
run;
- 12 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
où :
• !SASROOT représente le chemin absolu où se situe l'exécutable SAS sur votre système ;
• /mon_prog.sas représente le chemin où se situe votre programme ;
• /mon_prog.log représente le chemin où vous souhaitez enregistrer le journal d'exécution de votre
programme.
Remarque : l'option -altlog est optionnelle. Elle permet de sauvegarder le journal afin de voir si l'exécution
s'est déroulée correctement ou non.
NOTE: The SAS System stopped processing this step because of errors.
NOTE: SAS set option OBS=0 and will continue to check statements.
This may cause NOTE: No observations in data set.
• vous pouvez ajouter une instruction OPTION dans l'autoexec de SAS ou bien au sein du
programme : options NOSYNTAXCHECK ;
• vous pouvez également mettre l'option dans le fichier de configuration (sasv8.cfg ou sasv9.cfg): -
NOSYNTAXCHECK.
- 13 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Un exemple de code :
%let path=c:\mondossier; /
*Création d'une macrovariable avec le chemin du répertoire nommé "mondossier" */
Data _null_;
X "mkdir &path"; /*Création du répertoire à l'aide de la macrovariable */
run;
DATA _NULL_ ;
X ;
RUN ;
Ou
X ;
DATA _NULL_ ;
X start excel;
RUN ;
- 14 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
DATA _NULL_ ;
X start calc;
RUN ;
DATA _NULL_ ;
X start notepad;
RUN ;
Par exemple si vous voulez ouvrir un fichier " txt " vous pouvez utiliser Notepad, si vous souhaitez ouvrir
un fichier Excel vous ouvrirez naturellement ce fichier avec le logiciel Excel.
La question FAQ (précédente) nous a montré comment lancer une application depuis SAS. Ceci est réalisé
en faisant appel aux commandes MS DOS. Pour ouvrir un fichier nous allons donc procéder de la même
manière.
Pour ouvrir le fichier classeur1.xls enregistré dans le répertoire c:\ nous allons écrire :
DATA _NULL_ ;
X start excel "c:/classeur1.xls";
RUN ;
Pour ouvrir le fichier test.txt enregistré dans le répertoire c:\ nous allons écrire :
DATA _NULL_ ;
X start notepad "c:/text.txt";
RUN ;
DATA _NULL_ ;
X md "c:/test/";
- 15 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
RUN ;
DATA _NULL_ ;
X rd "c:/test/";
RUN ;
- 16 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
proc javainfo;
run;
Les commandes « X », « systask » et « call system » permettent d'exécuter des commandes ou des fichiers
de script « BAT » depuis SAS.
a/ Commande X
X "c:\test\fichier.bat";
- 17 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
data _null_;
call system('dir /w');
run;
c/ Commande Systask
d/ Macro %SYSEXEC
%sysexec time;
Aide en ligne - SAS 9 : Running Windows or MS-DOS Commands from within SAS
Exemple 1 :
data_null_;
X = sysget('USERNAME');
put x=;
run;
Exemple 2 :
%let HOMEDIR=%SYSGET(HOME);
Comment positionner des variables système Unix lors d'une session SAS ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
Il est nécessaire d'utiliser la commande X ainsi que le paramètre « setenv ».
Exemple :
- 18 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Attention, la valeur de la variable ne sera disponible que pour la session SAS en cours.
Aide en ligne : Executing Operating System Commands from Your SAS Session
- 19 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
- 20 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
DATA equipe;
INPUT nom$ anneecreation nbjoueur;
CARDS;
sharks 1950 12
tigers 1951 33
lions 2000 42
zodiac 2006 11
flyers 2007 42
;
RUN;
DATA equipe;
INFILE "coatch.txt";
INPUT nom$ anneecreation nbjoueur;
RUN;
PROC PRINT DATA=equipe;
RUN;
INFILE permet donc de lire des fichiers plats suivis entre " " de leur nom.
Comment lire des données qui contiennent des espaces dans un programme SAS ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
Et si notre nom d'équipe était en deux parties (séparées par un espace) ? Pour SAS un espace correspond
à la valeur suivante :
- 21 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
DATA equipe;
INFILE "coatch.txt";
INPUT nom$ 1-10 anneecreation 13-16 nbjoueur;
RUN;
PROC PRINT DATA=equipe;
RUN;
Ce que nous venons d'ajouter signifie que les données de la variable nom peuvent être sur 10 caractères
maximum, que l'année de création de l'équipe est sur 4 caractères.
Cette méthode permet donc de spécifier les positions des variables, ou leur taille (en comptant le nombre
de caractères y compris les blancs). Résultat : nous affichons les blancs et pas de décalage de données
en sortie.
PROC SQL;
SELECT * FROM base;
QUIT;
DATA equipe;
INPUT nom$ :20. anneecreation nbjoueur;
CARDS;
sharks 1950 12
tigers 1951 33
lions 2000 42
zodiac 2006 11
flyers 2007 42
;
RUN;
Dans cet exemple, nous avons spécifié une taille pour la variable nom. Un nom d'équipe disposera de 20
caractères maximum à l'affichage. Pour cela, il est impératif de mettre "nb" après la variable en question
dans la section INPUT de votre programme. Bien entendu, "nb" est à remplacer par n'importe quelle valeur
entière.
- 22 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
DATA equipe;
INPUT nom$ :20. anneecreation nbjoueur;
CARDS;
sharks 1950 12 tigers 1951 33 lions 2000 42 zodiac 2006 11 flyers 2007 42
;
RUN;
PROC PRINT DATA=equipe;
RUN;
Toutes les données sont sur une unique ligne. Cependant, à l'exécution de notre programme SAS il n'a été
pris en compte que ceci :
Donc même si toutes les données sont sur une seule ligne tout n'est pas pris en compte. Pour lire des
données saisies sur une ligne unique il suffit d'ajouter l'instruction @@ dans la section INPUT de votre
programme comme suit :
DATA equipe;
INPUT nom$ :20. anneecreation nbjoueur @@;
CARDS;
sharks 1950 12 tigers 1951 33 lions 2000 42 zodiac 2006 11 flyers 2007 42
;
RUN;
PROC PRINT DATA=equipe;
RUN;
1 sharks 1950 12
2 tigers 1951 33
3 lions 2000 42
4 zodiac 2006 11
- 23 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
5 flyers 2007 42
DATA tab_boucles;
DO i=0 TO 10 BY 1;
v= i*10;
OUTPUT tab_boucles;
END;
RUN;
DATA base;
ATTRIB v1 LENGTH=$1. LABEL="Ma premiere variable";
ATTRIB v2 LENGTH=8. LABEL="Ma deuxieme variable";
v2=_N_;
input v1;
cards;
a
b
c
d
;
RUN;
- 24 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
WHERE v2 LE 2;
RUN;
DATA t1;
input t t12 t13;
cards;
1 2 1
3 5 6
5 6 7
8 9 3
4 5 3
;
run;
DATA t2;
input t t2;
cards;
1 2
3 5
7 8
2 3
4 5
;
run;
DATA fusion;
- 25 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
DATA VIDE;
SET _NULL_;
length a 3;
run;
Ou comme suit :
Et pour le SQL :
proc sql;
CREATE TABLE tab (a int);
quit;
DATA base;
INPUT var1 var2;
CARDS;
10 5
3 8
;
DATA base2;
SET base;
RENAME var1=variable1;
RENAME var2=v2;
RUN;
- 26 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
La table "base" contient deux variables : les variables "var1" et "var2". Grâce à l'option "RENAME", nous
avons renommé la variable "var1" en "variable1" et la variable "var2" en "v2".
PROC SQL;
CREATE TABLE tab (a int);
QUIT;
DATA toto2;
format cle $10. frequence 5. effectif 5.;
input cle $ frequence effectif;
cards;
rean 10 .
tutu 80 .
titi 1 .
tata 90 .
k . 2
k . 1
;
run;
- 27 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
DATA base;
INPUT v1 v2;
CARDS;
1 2
10 3
;
RUN;
DATA base;
RETAIN v2 v1;
SET base;
RUN;
PROC PRINT DATA=base2;
RUN;
DATA base;
INPUT v1 v2;
CARDS;
9 5
10 3
;
RUN;
DATA base2;
SET base;
id=_N_;
RUN;
DATA CHECK;
length Autorise $10 MaChaine $50;
Autorise='abcdf';/* ce sont les caractères autorisés */
Machaine='abcbcdfaaqabddb';
x = verify(Machaine, autorise);
run;
DATA _null_;
SET CHECK;
lettre = substr(Machaine, x, 1);
Put 'La lettre ' lettre ' est incorrecte';
- 28 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
run;
DATA one;
length n 8;
input n @@;
y=lag1(n);
cards;
3 5 . 6 1 4
;
run;
DATA _null_;
SET One;
IF y > x then
put 'Y plus grand que X';
else
put 'Y plus petit que X';
run;
Résultat de la log
X Y
3 .
5 3
. 5
6 .
1 6
4 1
- 29 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
• L'utilisation de where est en général plus rapide que celle de if. Au moins parce qu'avec where SAS
n'est pas obligé de charger (et éventuellement traiter) des enregistrements inutiles (filtrés par la
condition). En plus, avec where SAS peut utiliser les index pour améliorer la performance ;
• L'utilisation de if est plus riche. En effet, avec where on ne peut utiliser que des variables présentes
dans la table source. Tandis que dans les conditions de if on peut également inclure des variables
systèmes (_N_, etc.) et des variables résultant des calculs de cette même étape data.
Ensuite :
• démarrer « SAS 9.1 English with DBCS and Unicode support » avec l'option encoding UTF8 dans la
commande de démarrage ;
• importer le fichier texte via une étape DATA en incluant l'encoding correct du fichier dans
l'instruction Infile (ex : encoding=unicode) ;
• repérer les variables contenant les caractères spécifiques à une langue, puis les transformer comme
suit avec la fonction KCVT dans l'étape DATA: Out =kcvt (in,"Encoding_entrée","Encoding_sortie").
Exemple :
data table;
infile "C:\exemple\extract.txt" lrecl=64000 firstobs=2 encoding=unicode ignoredoseof dsd
missover dlm='09'x ;
input var1 var2 ;
Var1 =kcvt (var1,"UTF8","wlatin2");
Run ;
UTF8 car l'option placée au démarrage de SAS modifie automatiquement tous les encoding à UTF8.
WLATIN2 : pour les caractères de l'Europe centrale (Pologne, Croatie, etc.). Pour les caractères français,
l'encoding est WLATIN1.
DATA equipe;
INPUT nom$ :20. anneecreation nbjoueur;
CARDS;
sharks 1950 12
tigers 1951 33
lions 2000 42
- 30 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
zodiac 2006 11
flyers 2007 42
;
RUN;
PROC SORT DATA=equipe OUT=equipe_triee;
BY nom anneecreation nbjoueur;
RUN;
Pour un tri décroissant de ce même programme, il suffit de remplacer la PROC SORT par ceci :
Attention ce tri ne sera décroissant que pour la variable nom, les autres resteront par défaut croissants.
%macro repair ;
%do i=1%to &dscount;
repair &&ds&i;
%end;
%mend;
proc sql;
create table work.listing as
select memname
from sashelp.vtable
where trim(upcase(libname)) = "MYLIB";
quit;
data _null_;
set work.listing;
call symput("ds"||trim(left(_N_)), memname);
call symput("dscount", _N_);
run;
- 31 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
run;
Comment conserver les dix meilleurs résultats (top ten) obtenus par groupe ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
L'idée est de créer un compteur, par groupe, et de ne garder que les valeurs inférieures ou égales à
dix. Prenons un exemple : comment conserver les dix meilleures ventes de chaque pays, dans la table
sashelp.prdsale ?
Création du compteur, réinitialisé à chaque nouveau groupe et extraction des dix premières valeurs de ce compteu
data top_ten(drop=cpt);
retain cpt 0;
set prdsale_tri;
by country;
cpt=cpt+1;
if first.country then cpt=1;
if cpt <=10 then output; run;
DATA titi;
dsid=open("sashelp.adomsg"); /*ouvrir la table*/
pw=attrn(dsid,"NOBS ");/
*obtenir le nombre d'obs, la fonction attrn peut recevoir d'autres paramètres NOBS NVARS...*/
rc=close(dsid);/*ermer la table*/
run;
proc contents DATA=sashelp.adomsg out=t noprint; run;
/*Avec la proc contents on obtient beaucoup plus d'informations*/
- 32 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
filename cmd pipe "Dir /B C:\"; /* Commande DOS pour lister C:\ */
data contenu_disque_c;
format var $500.;
infile cmd DSD MISSOVER; /* lecture du filename */
input var $;
run;
Au travers du filename pipe, SAS lit le résultat de la commande DOS comme un fichier.
Cet exemple fonctionne avec d'autres commandes système aussi bien sur Windows que sur Unix.
- 33 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
L'instruction LIBNAME permet de spécifier le chemin d'accès au fichier. L'instruction SET signifie que l'on
reprend un tableau existant, soit ici tab.
Remarque :
le chemin spécifié peut bien évidemment être différent.
PROC CONTENTS;
RUN;
PROC CONTENTS est une procédure SAS qui permet d'obtenir le nombre d'observations (ou de lignes), le
nombre de variables, le nom de la table ou encore la date de création.
DATA t1;
input a b;
cards;
1 2
1 4
2 6
3 4
3 3
5 6
4 8
;
run;
/*V9*/
proc sort DATA=t1 out=tr_tr nodupkey dupout=tr_dup; BY a;run;
/*V8 ou V9*/
proc freq DATA=t1 ; TABLES a/out=t1_fr(WHERE=(COUNT>1)); run;
proc sql;
CREATE TABLE t1_v9_dup AS
SELECT al_1.*
FROM t1 al_1, t1_fr al_2
WHERE al_1.a=al_2.a;
- 34 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
quit;
/***************************************/
/* Code SAS pour lire le contenu d'un fichier et l'insérer à la fin d'un autre fichier txt*/
/***************************************/
DATA _null_;
/* lecture du fichier externe */
length enregis $200;
INFILE FilInput dlm='£'; /
* afin de lire la totalité de l'enregistrement, la probabilité de trouver ce caractère étant limitée */
input enregis;
/* écriture dans le fichier de sortie (comme le mode append) */
file FilOut mod;
put enregis;
run;
Comment lire un fichier de données de type texte contenu dans un fichier de type ZIP ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
Si un fichier de données de type texte est compressé au format zip. Il existe un moyen de le lire directement
sans le décompresser. Il suffit d'utiliser l'utilitaire PKUNZIP.EXE de décompression des fichiers au format
ZIP. L'instruction FILENAME comprend l'option PIPE qui permet d'exécuter une commande lors de son
appel.
- 35 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
L'option " -c " permet d'extraire les données du fichier texte directement vers une console DOS et non vers
le disque dur.
Le Système SAS® lira les informations affichées sur la mire DOS.
• il ne faut pas lire les premières lignes de la mire DOS. Elles concernent seulement l'utilitaire
PKUNZIP.EXE. (Pour ce faire, utiliser l'instruction FIRSTOBS= ) ;
• le fichier compressé au format ZIP ne doit contenir qu'un seul fichier texte ;
• ce traitement est plus long lors de la lecture des données.
data _null_;
n=-1;
infile web recfm=s nbyte=n length=len _infile_=tmp;
input;
file test recfm=n; put tmp $varying32767. len;
run;
Attention
Le programme ci-dessus fonctionne correctement dans le cas où vous n'utilisez pas de machine PROXY
pour vos connexions Intranet/Internet. Dans le cas où vous recevez l'erreur " ERROR: service httpd not
found" , c'est qu'il n'arrive pas à contacter le lien demandé. Dans ce cas, une machine PROXY est utilisée.
Vous devez déclarer son adresse Web lors de l'exécution de l'instruction FILENAME. L'option DEBUG
permet juste d'avoir plus d'informations sur la lecture du fichier et n'est pas indispensable.
Exemple :
- 36 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
proxy='http://proxy2.eur.sas.com.:3128/' debug ;
2/ Pour convertir une table .sd7 en .sas7bdat, il suffit d'utiliser une proc copy pour convertir les données
de la bibliothèque créée ci-dessus vers une bibliothèque 'standard'.
Exemple :
- 37 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
%Mend ;
Comment créer une table SAS à partir de plusieurs fichiers texte, stockés dans un
même répertoire, en commençant la lecture des observations sur la nième ligne ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
L'utilisation d'un FILENAME avec l'option PIPE va vous permettre dans un premier temps d'utiliser la
commande DOS pour lister les fichiers.
Ensuite, vous devez combiner les options FILEVAR et FIRSTOBS de l'instruction INFILE.
L'exemple de code ci-dessous liste l'ensemble des fichiers texte présents dans le répertoire « c:\temp\text
files », puis lit ces fichiers à partir de la 2e ligne. Tous les fichiers ont la même structure.
data f2r;
infile test truncover;
input ftr $200.;
infile test filevar=ftr truncover end=done firstobs=2;
do while(not done);
input var1 var2 var3 ;
output;
end;
run;
Lors de la création d'un fichier texte, l'instruction « put var1 var2 » insère
un espace entre les champs. Comment ne pas avoir cet espace ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
Vous pouvez utiliser cette syntaxe :
- 38 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Exemple :
data _null_ ;
file "c:\temp\test.txt" ;
var1="aaa" ;
var2="111" ;
put var1 +(-1) var2;
run ;
Contenu de test.txt :
aaa111
Pour en savoir plus : depuis le sommaire de l'aide en ligne, sélectionner SAS Products > Base SAS > SAS
Language dictionary > Dictionay of language elements > Statements > PUT Statement > Column Pointer
Controls.
Exemple :
var1 var2
1 .
2 .
3 y
4 z
5 r
6 r
data test;
run;
- 39 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
-----------------------------------------------
/* La table maitresse. */
data BIG ;
X = 1 ; Y = 'A' ; output ;
X = 2 ; Y = 'B' ; output ;
X = 3 ; Y = 'C' ; output ;
run ;
/*Création l'index */
proc datasets lib=work nolist ;
modify BIG ;
index create X ;
quit ;
/*Creation l'index */
proc datasets lib=work nolist ;
modify SMALL ;
index create X ;
quit ;
-----------------------------------------------
- 40 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
DATA base;
INPUT var1$ var2;
CARDS;
10 5
3 8
;
DATA base2;
SET base;
var3=input(var1,3.);
RUN;
DATA base;
INPUT var1$ var2$;
cards ;
Hello world
;
DATA base2;
SET base;
var3=var1!!var2;
RUN;
DATA base;
INPUT var1$ var2$;
cards ;
Hello world
;
RUN;
DATA base2;
SET base;
var3=var1!!var2;
RUN;
DATA base3;
SET base2;
var4=compress(var3);
- 41 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
RUN;
DATA base;
INPUT var1$ var2$;
cards ;
Hello world
;
RUN;
DATA base2;
SET base;
var3=var1!!var2;
RUN;
DATA base3;
SET base2;
var4=UPCASE(var3);
RUN;
DATA base;
INPUT var1$;
cards ;
HEllO
;
RUN;
DATA base2;
SET base;
var2=LOWCASE(var1);
RUN;
DATA base;
INPUT var1$;
cards ;
HEllO
- 42 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
;
RUN;
DATA base2;
SET base;
var2=SUBSTR(var1,2,3);
RUN;
Pour résoudre ce problème, on peut utiliser le format ZX., où X désigne le nombre total de chiffres avec
les zéros.
DATA t;
i=123456;
format i_bis Z10.;
i_bis=i;
run;
La fonction FIND cherche la première occurrence du mot spécifié en paramètre et retourne sa position.
L'exemple ci-dessous compare les résultats obtenus avec la fonction FIND et la fonction INDEX (présente
depuis la V8). La fonction index étant elle sensible à la casse.
Exemple :
data _null_;
/* cherche le mot trouve, insensible à la casse */
A=find('où se trouve le mot recherché','TROUVE','i');
put A=; /* écrit la valeur de A */
Résultats :
A=7
- 43 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
B=0
Exemple :
Data Faq ;
X= 'ALLO SUPPORT';
Y=propcase(X);
Put X= Y= ;
Run;
Résultat :
• X=ALLO SUPPORT
• Y=ALLO SUPPORT
- 44 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Exemple :
/* Pour avoir les noms des formats présents dans le libname FAQ */
proc catalog cat=FAQ.formats;
contents;
quit;
run;
Exemple :
- 45 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
DATA base;
ATTRIB variable FORMAT=DDMMYY10. LABEL="Ma date";
variable=date();
RUN;
PROC PRINT DATA=base LABEL;
RUN;
data _null_;
variable = '30JUL1970:20:30:00'dt;
date = datepart(variable);
heure = timepart(variable);
put "la date est " date ddmmyy10.;
put "l'heure est " heure time5.;
run;
Exemple :
proc format;
picture ddmmyyyy other='%0d/%0m/%0Y' (datatype=date);
picture dtddmmyyyy other='%0d/%0m/%0Y' (datatype=datetime);
run;
data _null_;
- 46 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
dt='18dec2005 12:34:56'dt;
put dt dtddmmyyyy.;
d='14feb2005'd;
put d ddmmyyyy.;
run;
data Datum;
attrib date format= weekdate17. informat=ddmmyy10. ;
num_day=weekday (date);
If num_day = 1 then num_day = 7;
else num_day=num_day -1;
cards;
03.01.2011
04.01.2011
05.01.2011
06.01.2011
07.01.2011
08.01.2011
09.01.2011
;
run;
• la fonction WEEK ;
• les formats WEEKU, WEEKV, WEEKW.
Si vous utilisez SAS 8.2 ou une version antérieure, vous pouvez utiliser l'une des méthodes suivantes.
- 47 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Ce programme calcule le numéro de semaine de la date courante, sachant qu'une semaine commence le
dimanche (norme US) :
data _null_;
Attrib date length=3. label='Date' format=date7. ;
Attrib semaine length=3. label='N° de semaine';
madate = TODAY();
semaine = INTCK('week', INTNX('year',madate,0),madate);
put semaine =;
run;
Ce programme calcule le numéro de semaine de la date courante, sachant qu'une semaine commence le
lundi :
data _null_;
date = TODAY();
semaine=-1;
cpt=0;
do until (semaine>0);
semaine=int((7*int((date+3156192)/7)+10 - mdy(1,1,year(date)+1 - cpt) - 3156192)/7);
cpt+1;
end;
output;
put semaine= ;
run;
- 48 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
DATA base;
INPUT var1;
cards ;
10.12345
;
RUN;
DATA base2;
SET base;
var2=ROUND(var1,0.01);/*Arrondi*/
RUN;
DATA base;
INPUT var1 var2;
cards ;
10 -2
;
RUN;
DATA base2;
SET base;
var3=LOG(var1);/*Logarithme népérien*/
var4=EXP(var1);/*Exponentielle*/
var5=SQRT(var1);/*Racine carrée*/
var6=ABS(var2);/*Valeur absolue*/
RUN;
Exemples :
Length var1 $ 10 ;
Var1=ranuni(0) ;
Var1=20*ranuni(0) ;
Var1=ceil (32*ranuni(0)) ;
- 49 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
- Pour générer une variable caractère contenant des chiffres et des lettres, vous pouvez utiliser ce
programme :
Length var1 $ 10 ;
do j=1 to 10;
var1=compress(var1)||trim(scan('A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9',
ceil(36*ranuni(0))));
end;
- Pour générer une variable caractère contenant des lettres, vous pouvez utiliser le programme ci-dessus,
en ne gardant que l'alphabet dans la première partie de la fonction SCAN, comme ceci :
Length var1 $ 10 ;
do j=1 to 10;
var1=compress(var1)||trim(scan('A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z',
ceil(26*ranuni(0))));
end;
- 50 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
DATA acquisition;
INFILE port lrecl=1 recfm=f unbuffered;
input i s;
IF i = '1a'x then stop;
run;
- 51 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
- 52 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Cependant les boucles %DO n'acceptent, contrairement aux boucles DO, que des incréments entiers. Pour
résoudre ce problème, on peut utiliser le code suivant :
%macro test;
%let i=1;
%do %until ( &i >= 5);
%put &i;
%let i =%sysevalf(&i+0.1);
%end;
%mend;
%test;
Certaines macrovariables sont créées automatiquement par le logiciel SAS et d'autres peuvent être créées
par l'utilisateur.
Exemple :
%LET maVar=World;
- 53 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Pour faire référence à une macrovariable vous devez la faire précéder du caractère "&".
2) Une macrofonction est une fonction pouvant être utilisée dans l'environnement macro du logiciel SAS.
Une macrofonction commence toujours par le caractère '%'.
Exemple :
%PUT Hello;
La macrofonction %PUT indique au logiciel SAS qu'il doit "imprimer" ce qui suit la fonction dans la fenêtre
"Journal", soit "Hello".
3) Un macroprogramme (ou macro) est un programme créé par un utilisateur. Ce programme ne peut être
utilisé que dans l'environnement macro du logiciel SAS.
Un macroprogramme commence toujours par le mot "%MACRO" et finit toujours par le mot "%MEND;"
%LET maVar=base;
PROC PRINT data=&maVar;
RUN;
DATA res;
SET base;
CALL SYMPUT('MaVar'_N_,var);
RUN;
Dans le dernier exemple, on va créer autant de macrovariables que de valeurs de la variable 'var'. Si 'var'
prend 10 valeurs MaVar1 prendra la première valeur de var, MaVar2 prendra la 2ème valeur de var, ..., MaVarn
prendra la nième valeur de var.
Il est important de signaler que les macrovariables sont des valeurs stockées en mémoire et non pas dans
des tables.
- 54 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
%MACRO test(var);
proc PRINT DATA = &var;
run;
proc means data=&var;
run;
%MEND test;
%test(maTable);
- 55 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
options symbolgen ;
data _null_;
set sashelp.class nobs=nobs ;
call symput ("nbobs",nobs);
run;
data _null_;
length MONUSER $50;
MONUSER=sysget(trim("USERNAME"));
put MONUSER=;
run;
MAVARIABLE=sysget(trim("$HOME"));
data _null_ ;
date = input("&sysdate",date7.) ;
put date ddmmyy8. ;
run ;
Résultat : 05/01/00
- 56 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Avec le passage à l'an 2000, lorsque l'option YEARCUTOFF n'est pas positionnée, cela peut engendrer des
problèmes si des tests sont réalisés par rapport à cette date.
En effet, sans le positionnement de YEARCUTOFF, la valeur de l'exemple précédent sera interprétée comme
la date 05/01/1900.
Pour que la valeur renvoyée par SYSDATE soit interprétée correctement, il suffit de positionner l'option
YEARCUTOFF à une valeur qui vous convient.
Exemple :
Résultat : 05/01/00
À partir des versions 6.12 TS060 et 6.09E TS470, vous pouvez aussi utiliser la macrovariable SYSDATE9
qui retourne l'année sur quatre digits.
DATA t;
input a $;
cards;
a
b
c
;
run;
%macro cration_macro_var;
DATA _null_; SET t;
call symput('var'||left(trim(_n_)),a);
call symput('nb_ligne',_n_);
run;
%do i =1 %TO &nb_ligne;
%put Valeur &i &&var&i..;
%end;
%mend;
%cration_macro_var;
- 57 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
%PUT _ALL_;
%PUT _AUTOMATIC_;
%PUT _USER_;
%LET v1=20;
%LET v2=10;
%LET v3=&v1-&v2;
%PUT &v3;
La macrovariable "v3" est égale à la chaine de caractères 20-10 et non à 10 (l'opération 20-10).
- 58 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Le caractère "&" étant un caractère privilégié de SAS, il faut utiliser une fonction spécifiant que le texte
rentré dans la macrovariable comporte un caractère spécial. La macrofonction %nstr() permet ce genre de
manipulation.
DATA base;
INPUT var1 var2;
cards ;
10 11
15 22
;
RUN;
%MACRO test();
DATA base2;
SET base;
CALL SYMPUT (COMPRESS("mavar"||left(put(_N_,4.))),var1);
varId=symget("mavar"||left(put(_N_,4.)))+2;
RUN;
%MEND test;
%test();
Comment lister les noms des tables d'une bibliothèque dans une macrovariable ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
À l'aide du programme ci-dessous vous pourrez lister les noms des tables contenues dans la bibliothèque
test2. Créons tout d'abord la bibliothèque et les tables :
- 59 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
DATA test2.b1;
INPUT X1 X2;
CARDS;
0 1
2 4
;
RUN;
DATA test2.b2;
INPUT X3 X4;
CARDS;
2 5
6 3
;
RUN;
Pour identifier les noms des tables et leur nombre procédez comme suit :
DATA base;
input v1;
cards;
1
2
;
RUN;
%LET test = %str(PROC PRINT DATA=base NOOBS;RUN;);
- 60 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
&test;
%LET test=%str(Hello;);
%PUT &test;
La différence entre les deux se situe au niveau du résultat de l'opération. Si celui-ci est un nombre entier
vous utiliserez %EVAL() sinon vous utiliserez %SYSEVALF(). L'exemple suivant illustre cette notion :
%LET v1=15;
%LET v2=10;
%LET v3=%EVAL(&v1-&v2);
%PUT &v3;
%LET v4=%SYSEVALF(&v1/&v2);
%PUT &v4;
- 61 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Voir aussi la fonction tranwrd pour modifier toutes les occurrences d'un mot dans une variable.
Pour changer un ou plusieurs caractères dans une chaine de caractères d'une base de données vous
pouvez utiliser les mêmes fonctions :
DATA _null_;
x=translate('SALUT LA SOCIETE', 'C','S');
put x=;
run;
Dans cet exemple, on remplace tous les 'S' de la chaine 'SALUT LA SOCIETE' par des C
- 62 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Les résultats des étapes désignées par "la lecture du contenu " sont visibles dans la LOG.
Compilation du code :
Lecture du contenu :
Compilation du code :
- 63 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
run;
%mend secure;
%secure
Lecture du contenu :
%macro concat(var1,var2);
*Traitement des macrovariables placées en paramètres, par exemple une concaténation ;
%let tmp1 =%sysfunc(compress(&var1,%str(%")));
%let tmp2 =%sysfunc(compress(&var2,%str(%")));
%put "&tmp1,&tmp2"; *Affiche le résultat de la concaténation des macrovariables temporaires tmp1 et
tmp2;
"&tmp1,&tmp2"; *Précise les éléments à renvoyer par le macroprogramme;
%mend;
Il est possible d'attribuer le résultat directement à une autre macrovariable avec la commande suivante :
Affiche : "Hello,World"
- 64 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
- 65 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
• le module SAS/AF permet, par l'intermédiaire du langage SCL, la création d'applications de type clic
bouton ;
• les macrofonctions %WINDOWS permettent de faire des interfaces graphiques.
- 66 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
• lancer une session, puis dans Options => Préférences, sélectionner OFF pour les items commands
et Tools ;
• dans les propriétés de l'icône SAS rajouter (après l'invocation de l'autoexec.sas) la syntaxe
suivante :
• Fermer SAS. Relancer SAS. Il n'existe plus aucun moyen de fermer/réduire quoi que ce soit.
Nota : avant de mettre en place ce genre de blocage, il convient de s'assurer que l'appli d'ouverture possède
bien un bouton de fermeture de SAS.
Syntaxe :
INIT :
instwid = makelist() ;
instreg = makenlist('LRX','LRY','ULX','ULY') ;
rc = setnitemn(instreg,100,'LRX') ;
rc = setnitemn(instreg,100,'LRY') ;
rc = setnitemn(instreg,0,'ULX') ;
rc = setnitemn(instreg,0,'ULY') ;
rc = setniteml(instwid,instreg,'_region_') ;
image = loadclass('sashelp.fsp.image.class');
- 67 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Dans un objet Data Table, comment peut-on mettre des lignes complètes en couleur ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
En utilisant la méthode _SET_VIEWER_ATTRIBUTE_ au niveau de l'entrée SCL de l'objet Data Table
(Modèle), vous pourrez mettre toutes les cellules d'une ligne en couleur.
Le code SCL suivant, associé à l'objet Data Table, permet de mettre toutes les lignes où sexe='M' en jaune.
INIT:
if sexe="M" then
call send(_viewer_,'_SET_VIEWER_ATTRIBUTE_','_ALL_', 'BCOLOR','YELLOW');
else
call send(_viewer_,'_SET_VIEWER_ATTRIBUTE_','_ALL_', 'BCOLOR', 'BACKGROUND');
Return;
- 68 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Quand une instruction SUBMIT est rencontrée, le code placé entre SUBMIT et ENDSUBMIT est chargé dans
le buffer. Il n'est pas exécuté. Pour libérer le buffer et exécuter le code, il faut utliser une autre section
SUBMIT - ENDSUBMIT avec le paramètre CONTINUE ou attendre l'exécution de la section TERM.
Que faut-il faire pour éviter que, dans certains cas, l'exécution
d'une ligne SCL ne soit pas terminée avant la suivante?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
La routine CALL WAIT(seconds) permet de synchroniser votre code SCL. Elle suspend l'exécution des
prochaines instructions du programme.
Suivant que vous ayez saisi le texte ou non, il existe deux moyens de colorier son texte :
Sélectionner le texte puis dans la boîte de commande saisir : color mtext votre_couleur.
R : rouge
G : vert
Y : jaune
B : bleu
K : noir
C : cyan
etc.
- 69 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Pour garder des performances acceptables, les dimensions des cellules sont calculées en fonction de la
partie visible de la première ligne du DATATABLE. Cela peut entraîner des troncatures si la première ligne
ne contient pas la variable la plus longue.
Une table contient un nombre d'observations physiques (NOBS) qui se décomposent en nombre
d'observations utiles (NLOBS) et en nombre d'observations marquées pour suppression (NDEL).
Cf. : SAS® SCREEN CONTROL LANGUAGE (55147) page 238-239 et l'AIDE EN LIGNE de la fonction ATTRN.
- 70 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
sqllist = makelist();
wherelst = makelist();
dsname = 'sasuser.crime';
call send(id,'where_bld',
sqllist,
dsname,
wherelst,
'TITRE',
'','','','',msg ) ;
return ;
Ce code appelle la fenêtre WHERE de SQL QUERY WINDOW et vous permet de construire une clause
WHERE.
Pour plus d'informations, vous pouvez consulter SAS® Guide to the SQL Query Window - Usage et
Reference (55342).
a)
Proc display c= libref.catalog.appli.type ; run;
b
DM 'AF=libref.catalog.appli.type AF';
Une autre possibilité est d'insérer dans le fichier CONFIG.SAS l'option INITCMD dont la syntaxe générale
est :
- 71 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Cf. : SAS® SCREEN CONTROL LANGUAGE, REFERENCE, Second Edition, page 238.
Remarque : Une clause WHERE sur une table ne sera pas prise en compte dans le calcul du nombre
d'observations. Pour connaître le nombre d'observations d'une table où une clause WHERE est appliquée,
il faut utiliser la fonction VARSTAT et la statistique N (cf. page 592).
Exemple :
dsid=open('libref.table') ;
nobs=0 ;
do while(fetch(dsid) ne -1) ;
nobs=nobs+1 ;
end ;
if dsid then dsid=close(dsid) ;
listid=makelist() ;
nobs=0 ;
- 72 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
rc = lvarlevel(dsid,'varname',nobs,listid) ;
rc = dellist(listid) ;
Comment se distribue une application AF sans copier les programmes sources SCL?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
Il s'agit d'utiliser la procédure BUILD avec l'instruction MERGE et l'option NOSOURCE.
Syntaxe :
Quelle est l'option qui permet d'éviter d'avoir le curseur qui clignote dans tous les écrans AF ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
Il suffit de rajouter l'option -$hidecursor dans votre config.sas.
Pour les prendre en compte il faut tester la frame en utilisant la commande suivante :
- 73 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
AF C=lib.cat.nom_frame.frame
hostcl=loadclass('sashelp.fsp.hauto');
call send(hostcl,'_new',wordobj,0,'word.application');
call send(wordobj,'_setproperty','visible','true');
call send(wordobj,'_getproperty','documents',wbsobj);
call send(wbsobj,'_do','open','c:\testdoc.doc');
call send(wordobj,'_getproperty','activedocument',wbsobj);
call send(wbsobj,'_getproperty','Sections',section);
call send(section,'_compute','Item', 1 ,section1);
call send(section1,'_getproperty','Footers',footer);
call send(footer,'_compute','Item', 1 ,footer1);
call send(footer1,'_getproperty','PageNumbers',wdpage);
call send(wdpage,'_compute','add','2','true',test);
call send(wbsobj,'_do','saveas','c:\testdoc.doc',0);
call send(wbsobj,'_do','close');
call send(wordobj,'_do','quit');
_getActiveCell(rowlist,collist)
= retourne les coordonnées de la cellule active (dans 2 listes, ici, rowlist et collist)
OU
Pour effectuer le test (variable caractère ou variable numérique), vous devez au préalable récupérer le type
de la colonne.
- 74 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
pushbutton:
tableviewer._getActiveCell(rowList,columnList);
if listlen(columnList) gt 0 then do;
columnNumber=getitemn(columnList,1);
sasdataset._getDisplayedColumnName(columnNumber,columnName);
sasdataset._getColumnNumber(columnName,columnNumber);
columnType=sasdataset.columns{columnNumber}.type;
if columnType='C' then do;
sasdataset._getColumnText(columnName,text);
put text=;
end;
else if columnType='N' then do;
sasdataset._getColumnValue(columnName,value);
put value=;
end;
end;
return;
Ci-dessous un exemple de code scl qui justifie à droite l'ensemble des colonnes d'une table :
init:
sds.table="work.b";
do i=1 to dim(sds.columns);
sds.columns{i}.justification='right';
end;
return;
Pour de plus amples informations sur l'utilisation de l'attribut " Columns ", nous vous invitons à consulter
l'aide en ligne du Système SAS.
- 75 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Vous pouvez effectuer une recherche sur "SAS Data Set Model: columns" pour le fonctionnement de
l'attribut " Columns "; et une recherche sur "Column Properties Class Attributes" pour obtenir la liste des
propriétés modifiables via cet attribut " Columns ".
Comment peut-on ouvrir une page html ou un fichier html depuis une application SAS/AF ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
Pour ouvrir une page html ou un fichier html, vous pouvez utiliser la commande WBROWSE.
pushbutton1 :
call execcmdi ('WBROWSE"http://www.sas.com"');
return;
pushbutton1 :
call execcmdi ('WBROWSE"C:\tests\ods\open.html"') ;
return;
L'exemple suivant est un 'Event Handler' créé sur un 'Graph Output Control' et est déclenché à partir de
n'importe quel objet (Event Generator=Any Object(*)).
La frame comporte donc une listbox comprenant des noms de graphiques et un 'Graph Output Control'
affichant le graphique sélectionné.
Dans ce cas présent, l' 'Event Handler' va permettre de contrôler à tout moment (Event Generator=Any
Object) que le graphique affiché correspond bien à l'item sélectionné dans la listbox.
Pour se faire le nouvel 'Event Handler' est appliqué sur l'évènement 'SelectedItem Changed' et utilise une
nouvelle méthode 'OnSelectedItemChanged'.
import sashelp.classes.attributeChangedEvent.class ;
- 76 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Remarque : cet exemple, et donc ce code, proviennent du support du cours NFRA (cours Frame v8).
length colname $ 8;
dfinit:
dcl list columns={};
call send(_self_,'_get_displayed_columns_',columns);
numcols=listlen(columns);
return;
init:
age:
if age gt 13 then
do i=1 to numcols;
colname=getitemc(columns,i);
_self_._setViewerAttribute(colname,'bcolor','orange');
end;
return;
dfterm:
if columns then columns=dellist(columns);
return;
Comment basculer sur une autre frame déjà ouverte sans l'exécuter une nouvelle fois ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
L'utilisation de la commande NEXT permet de se positionner sur une frame déjà active.
Cette commande s'utilise conjointement avec la valeur donnée à l'attribut Title de la frame concernée.
Ainsi, pour une frame dont le titre est " test ", la frame " test " est rendue active de la manière suivante :
- 77 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
do i=1 to dim(sasdataset1.columns);
sasdataset1.columns{i}.dataBackgroundColor='cyan';
end;
- 78 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
L'attribut Columns accepte uniquement le numéro de la colonne, il est possible de récupérer son numéro
via la méthode _getColumnNumber qui prend le nom de la colonne comme argument.
Pour pouvoir rester sur la fenêtre lancée par le bloc submit, il faut rajouter la fonction SCL Call ExecCMD
juste après le bloc submit.
Pour l'exemple ci-dessous, sans le Call ExecCMD, la frame Test est appelée et prend la main (la fenêtre
Output est donc en arrière plan).
INIT:
Submit;
proc print data=sashelp.air;
run;
EndSubmit;
Call ExecCMD('output');
Call display ('sasuser.af.test.frame');
Return;
Est-il possible de créer des boites de dialogues avec des messages d'erreurs ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
En version 8, il est possible d'en créer en utilisant la fonction SCL MESSAGEBOX (cf aide en ligne) dont
voici la syntaxe :
-icon :
-buttons :
- 79 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
'O' : OK (default)
'OC' : OK Cancel
'YN' : Yes No
-right :
Exemple :
En version 8, comment peut-on afficher une icône sur un Push Button Control ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
Au niveau des attributs du Push Button Control, vous devez modifier deux attributs concernant
l'apparence :
- 80 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
- ButtonStyle : choix de la valeur Icon Only ou Icon with Text (attention, la valeur par défaut est Text Only
ce qui peut expliquer la non visualisation de l'icône)
- 81 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Sommaire > SAS AF et fomulaires > Interface graphique avec SAS BASE : %WINDOW
Comment est-il possible de donner à son application AF un " look " Windows ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
Il suffit de rajouter l'option -$guifont dans la ligne de commande lançant votre application.
- 82 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
- 83 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
DATA;
file groupe;
/* afficher le groupe */
put '[ShowGroup(MonGroupeSAS, 1)]';
S'il faut relancer le SDW sans les précédentes informations (ie. repartir sur une installation vierge) il
convient de supprimer les fichiers ou les déplacer.
- 84 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
- 85 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Le paragraphe suivant :
'When the p-value is less than the predetermined critical value (alpha value), you reject the null hypothesis
and conclude that the data came from the theorical distribution'
Ce qui signifie que, en posant les hypothèses suivantes pour un test de normalité :
H0 : les données suivent une loi normale ;
H1 : les données ne suivent pas la loi normale.
- Si la p-value est inférieure à 'a', alors on rejette l'hypothèse nulle c'est-à-dire l'hypothèse que les données
ne suivent pas une loi normale.
- Si la p-value> 'a', alors on ne peut pas refuser l'hypothèse que les données suivent une loi normale.
PROC FREQ;
TABLES var1*var2;
RUN;
PROC FREQ calcule dans ce cas le nombre de var1 par le nombre de var2. La fréquence est en pourcentage.
Le programme ci-dessus vous donnera le pourcentage de la variable var1 par rapport à la variable var2.
Bien entendu, diverses options sont possibles en plus de TABLES.
- 86 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
votre programme étant le nom que vous avez donné à votre programme.
PROC MEANS permet d'afficher les variables concernées, calcule le nombre total d'observations pour
chaque variable ainsi que la moyenne, l'écart-type, la valeur minimum et maximum que peuvent avoir vos
variables.
encadrer votre procédure avec les instructions "ODS trace on;" et "ODS trace off;", comme ci-après :
- 87 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
proc GLM;
...
run;
ODS TRACE OFF;
Après exécution de ce code, les noms des résultats produits successivement par la procédure apparaissent
dans la log.
dans le cas où plusieurs résultats portent le même nom, l'option MATCH_ALL permet de sauvegarder tous
les résultats dans des tables séparées :
%macro tasr(libref=,entree=,sortie=,nb=);
data &libref..&sortie (drop=i j count);
count=0;
array obsnum(&nb) _temporary_;
do i=1 to &nb;
redo:
select=ceil(ranuni(12345)*n);
set &libref..&entree point=select nobs=n;
do j=1 to count;
if obsnum(j)=select then goto redo;
end;
position=select;
- 88 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
count=count+1;
obsnum(count)=select;
output;
end;
stop;
set &libref..&entree;
run;
%mend;
Exemple :
tirage au sort de 300 observations dans une table de 500 observations :
%tasr(libref=work,entree=donnees,sortie=donnees2,nb=300);
- 89 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
data select(drop=i);
do i=1 to 20;
x=int(ranuni(45123)*6864)+1000;
output;
end;
run;
Distribution normale
Paramètres : moyenne=10, variance=0.1 (Seed=1515).
Les fonctions rannor et normal sont strictement identiques.
data select(drop=i);
do i=1 to 20;
x=10+sqrt(0.1)*normal(1515);
output;
end;
run;
Distribution lognormale
Paramètres : moyenne=20 et écart-type=5 (seed = 5213).
data select(drop=i);
do i=1 to 20;
x=exp(20+5*rannor(5213);
output;
end;
run;
data select(drop=i);
do i=1 to 20;
x=0.3*rannor(456789)+sqrt(1-0.3**2)*rannor(456789);
output;
end;
run;
Trois méthodes, en ordre croissant d'efficacité, dans lesquelles on entre les moyennes et écarts-types des
deux lois normales.
data a;
keep x y;
mu1=10; mu2=20; var1=4; var2=9; rho=.5;
do i = 1 to 20;
x = mu1+sqrt(var1)*rannor(123);
y = (mu2+rho*(sqrt(var2)/sqrt(var1))*(x-mu1))+sqrt(var2*(1-rho**2))*rannor(123);
output;
end;
run;
data b;
keep x y;
mu1=10; mu2=20; var1=4; var2=9; rho=.5;
do i = 1 to 20;
x = rannor(123);
y = rho*x+sqrt(1-rho**2)*rannor(123);
x = mu1 + sqrt(var1)*x;
- 90 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
y = mu2 + sqrt(var2)*y;
output;
end;
run;
data c;
keep x y;
mu1=10; mu2=20; var1=4; var2=9; rho=.5;
std1=sqrt(var1); std2=sqrt(var2);
c=sqrt(1-rho**2);
do i = 1 to 20;
x = rannor(123);
y = rho*x+c*rannor(123);
x = mu1 + sqrt(var1)*x;
y = mu2 + sqrt(var2)*y;
output;
end;
run;
Distribution Gamma
Paramètres : Beta=2 et Alpha=4 (seed = 123154).
data select(drop=i);
do i=1 to 20;
x=2*rangam(123154,4);
output;
end;
run;
Distribution exponentielle
Paramètre : lambda=3 (seed = 4145).
data select(drop=i);
do i=1 to 20;
x=2*ranexp(4145)/3;
output;
end;
run;
Distribution Beta
Paramètres Alpha=5 et Beta=3 (seed = 12345).
data select(drop=i);
do i=1 to 20;
y1=rangam(12345,5);
y2=rangam(12345,3);
x=y1/(y1+y2);
output;
end;
run;
Distribution de Weibull
Paramètres c=2 et lambda=1/75 (seed = 212121).
data select(drop=i);
do i=1 to 20;
x=75*(-log(ranuni(212121)))*(1/2);
output;
- 91 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
end;
run;
Pour plus de détails, un article est consacré à la génération de nombres aléatoires avec le module SAS/
BASE® dans l'Observations 3rd quarter 1992.
• Si toutes les composantes d'un vecteur aléatoire X suivent une loi normale et si toutes sont
indépendantes, alors X est gaussien. Une CNS pour qu'un vecteur gaussien ait ses composantes
indépendantes, est que sa matrice de covariance soit diagonale.
Code SAS dans le cas d'un vecteur bidimensionnel :
• Dans le cas d'un vecteur multidimensionnel (dimension > 2), une MACRO %MVN est disponible
sur notre site internet à l'adresse suivante http://ftp.sas.com/techsup/download/stat dans le fichier
MVN.sas.
- 92 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Si les données ne sont pas statistiquement assimilables à des données normales, c'est-à-dire si elles
présentent des asymétries extrêmes ou sont ordinales, les méthodes non paramétriques de la procédure
NPAR1WAY sont plus appropriées.
• CDF : retourne le niveau de probabilité cumulée à gauche d'une fonction de distribution donnée ;
• PDF : retourne la valeur de la densité de probabilité d'une fonction de distribution donnée.
• Bernoulli
• F
• Laplace
• Poisson
• Beta
• Gamma
• Logistic
• T
• Binomial
• Gaussian
• Lognormal
• Uniform
• Cauchy
• Geometric
• Negbinomial
• Wald
• Chisquare
• Hypergeometric
• Normal
• Weibull
• Exponential
• Igauss
• Pareto
- 93 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
La procédure FREQ dans le cas d'une table d'entrée 2*2, permet également le calcul des odds ratios. Une
note technique SAS intitulée " Some Issues in using PROC LOGISTIC for Binary Logistic Regression" est
disponible sur le site SAS à l'adresse suivante : http://ftp.sas.com/techsup/download/technote/ts274.pdf
• l'approximation de Cochran et Cox : elle permet d'associer à T une probabilité p qui vérifie une loi
de Student correspondant à des échantillons de tailles similaires, les effectifs des deux échantillons
mis en cause. La probabilité p ainsi associée permet de tester l'égalité des moyennes ;
• l'approximation de Sattherwaite : il est possible d'utiliser l'approximation de Sattherwaite pour
associer à T un nombre df de degrés de liberté. Sous l'hypothèse d'égalité des moyennes, T est
assimilée à une loi de Student à df degrés de liberté.
Le test de Cochran et Cox est plus conservatif que le test de Sattherwaite. Par défaut, le test de Sattherwaite
est privilégié.
data essai;
c52=comb(5,2);
p52=perm(5,2);
- 94 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
run;
data one;
drop i;
do i=1 to 50;
y=10+25*ranuni(12345);
output;
end;
run;
proc freq data=one noprint;
table y / out=out;
run;
data final;
set out;
cumpct+percent;
output;
run;
title 'fonction de repartition';
symbol i=steplj v=none;
proc gplot data=final;
plot cumpct*y;
run;
- 95 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
La fonction CINV attend un percentile de la distribution du Khi-deux alors que la fonction KHI2.INVERSE
attend une probabilité unilatérale.
Remarque
La fonction CINV est l'inverse de la fonction PROBCHI de SAS®.
Exemple
SAS :
X= =CINV (0.95, 3)
X=7.81
Excel :
X=KHIDEUX.INVERSE (0,05, 3)
X=7.81
Exemple :
- 96 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
run;
Pour corriger cette erreur, suivez les indications de la SAS Note suivante :
http://support.sas.com/kb/24/435.html
Le fichier téléchargé contient la dernière version de la procédure QUANTREG, qui sera mise à jour en
sélectionnant le choix « update ».
- 97 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Dans la procédure REG, comment récupérer la p-value du modèle dans une table ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
Cette statistique n'est pas disponible en standard en sortie de la procédure REG. Par contre elle peut être
recalculée dans une étape data, en utilisant la somme des carrés de l'erreur et le R² (disponibles dans la
table créée par l'option outest= de la procédure REG).
data calc;
* la table sortie a été obtenue en sortie
d'une procédure REG, avec les options outest=sortie mse sse ;
set sortie;
* somme des carrés totale ;
SST=_SSE_/(1-_RSQ_);
* somme des carrés du modèle ;
SSM=SST-_SSE_;
* carré moyen du modèle ;
MSM=SSM/_IN_;
* valeur du F et de la pvalue associée ;
F=MSM/_MSE_;
pvalue=1-probf(F,_IN_,_EDF_);
- 98 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
run;
Comment récupérer, dans une table SAS, les paramètres estimés dans la procédure GLM ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
Ce n'est pas prévu dans la procédure GLM. La solution consiste à passer par la procédure MIXED, avec
une instruction MAKE.
- 99 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Quelles sont les différences existant entre les procédures MIXED et GLM ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
Il existe deux différences majeures entre les procédures MIXED et GLM :
• MIXED propose uniquement des tests pour les effets fixes qui sont basés sur l'erreur de type 3,
tandis que GLM offre des tests basés sur les erreurs de type 1,2, 3 et 4 ;
• GLM utilise la méthode des moments pour estimer les composantes de la variance tandis que
MIXED utilise le maximum de vraisemblance.
Comment réaliser des tests de parallélisme pour valider une analyse de la covariance ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
Une analyse de la covariance se réalise en deux étapes :
Pour réaliser le test de parallélisme, c'est-à-dire d'égalité des pentes, il est possible d'utiliser soit la
procédure REG, soit la procédure GLM.
Dans les deux cas, le test est strictement identique.
La syntaxe SAS est la suivante :
proc GLM ;
class GROUPE ;
model QC = GROUPE V02 GROUPE*V02 / e xpx solution ;
lsmeans GROUPE / sterr pdiff cov ;
run ; C'est l'effet GROUPE*V02 qui teste le parallélisme.
proc REG ;
model QC = GROUPE1 GROUPE2 V02_1 V02_2 / noint ;
parallel : mtest V02_1 - V02_2 = 0 / print details ;
run ;
- 100 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Dans la procédure MODEL, l'option 'white' permet de tester l'existence d'hétéroscédasticité en mettant en ?
uvre le test de White.
Dans la procédure REG, l'option 'spec' teste la validité des moments d'ordre 1 ou 2. L'option 'acov' permet
d'avoir une estimation de la matrice asymptotique de variance-covariance des régresseurs suivant l'article
de White.
Mais toutes les deux ne proposent pas de correction dans l'estimation du modèle et des paramètres
correspondants.
Pour corriger une régression des effets d'hétéroscédasticité, le Système SAS® propose une
méthode utilisant la régression pondérée. Des informations théoriques concernant la correction de
l'hétéroscédasticité par la régression pondérée sont disponibles dans le manuel SAS suivant :
Univariate and Multivariate General Linear Models Theory and Applications using SAS Software Neil
H.Timm and Tammy A. Mieczkowski.
Le programme qui réalise cette correction est également disponible sur le site de SAS Institute sous la
dénomination suivante : 'WLSE for data with heteroscedasticity' et à l'adresse suivante :
http://www.sas.com/samples/A55809
À quoi correspondent les différentes sommes des carrés des écarts définies sous SAS ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
SS1 :
- 101 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
SS2 : elle est dérivée de la différence entre les sommes des carrés des écarts des sous-modèles
correspondants.
L'erreur de type 2 d'un effet donné est en fait la différence d'erreur due à l'ajout de cet effet dans le modèle
une fois que tous les autres effets ont été ajoutés au modèle général, excepté les effets composites.
Alors, les SS2 sont définies comme suit :
- 102 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
• Les SS3 et SS4 diffèrent uniquement si les données sont déséquilibrées (valeurs manquantes
présentes). Dans ces cas-là, SS3 conserve l'orthogonalité tandis que SS4 conserve l'équilibre des
données, c'est à dire contrebalance le déséquilibre des données.
Le type de somme des carrés des écarts à considérer dépend de ce que l'on souhaite étudier. Dans le cas
d'une régression linéaire classique, valeurs explicatives continues, SS2, SS3 et SS4 sont identiques. Dans
le cas d'une analyse de variance, valeurs explicatives nominales, SS1, SS2, SS3 et SS4 peuvent être utiles
toutes les quatre.
- 103 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
supplémentaire lors de la résolution du problème inverse. À savoir, elle impose la nullité de la dernière
modalité de chaque variable.
2- Avec la proc TRANSREG, il faut utiliser l'option DESIGN et l'instruction MODEL CLASS en précisant la
variable catégorielle :
Dans ce cas, les variables indicatrices sont générées dans une table Datan.
- 104 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
• le test de White ;
• le test de Breusch-Pagan.
On souhaite imposer les paramètres comme suit : 1 pour X1, 2 pour X2, 3 pour X3, 4 pour X4 et 5 pour X5.
La solution consiste dans un premier temps à construire à l'aide d'une étape data une variable offset,
combinaison linéaire des variables X1-X5, en utilisant les valeurs imposées comme des constantes.
data newdata;
set data;
offstvar=1*x1+2*x2+3*x3+4*x4+5*x5;
Il faut ensuite lancer une régression logistique, utilisant la variable offset et les variables explicatives
restantes :
À noter que la totalité des paramètres peut être imposée facilement de la manière suivante :
• il faut tout d'abord créer une table d'une seule observation, avec comme variables les variables
explicatives (chacune de ces variables sera affectée de la valeur que l'on souhaite imposer à son
estimateur) ;
- 105 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
• spécifier ensuite cette table dans l'option INEST=, au niveau de l'instruction de la procédure
LOGISTIC. Spécifier également l'option MAXITER=0 dans l'instruction MODEL.
Data Neural;
input Treat $ Sex $ Age Dur Pain $ @@;
datalines;
P F 68 1 No B M 74 16 No P F 67 30 No
P M 66 26 Yes B F 67 28 No B F 77 16 No
A F 71 12 No B F 72 50 No B F 76 9 Yes
A M 71 17 Yes A F 63 27 No A F 69 18 Yes
B F 66 12 No A M 62 42 No P F 64 1 Yes
A F 64 17 No P M 74 4 No A F 72 25 No
P M 70 1 Yes B M 66 19 No B M 59 29 No
A F 64 30 No A M 70 28 No A M 69 1 No
B F 78 1 No P M 83 1 Yes B F 69 42 No
B M 75 30 Yes P M 77 29 Yes P F 79 20 Yes
A M 70 12 No A F 69 12 No B F 65 14 No
B M 70 1 No B M 67 23 No A M 76 25 Yes
P M 78 12 Yes B M 77 1 Yes B F 69 24 No
P M 66 4 Yes P F 65 29 No P M 60 26 Yes
A M 78 15 Yes B M 75 21 Yes A F 67 11 No
P F 72 27 No P F 70 13 Yes A M 75 6 Yes
B F 65 7 No P F 68 27 Yes P M 68 11 Yes
P M 67 17 Yes B M 70 22 No A M 65 15 No
P F 67 1 Yes A M 67 10 No P F 72 11 Yes
A F 74 1 No B M 80 21 Yes A F 69 3 No
;
data parms;
set parms;
format estimate 12.6; /* application d'un format */
run;
proc print;
run;
Comment obtenir le R2 (R-square) ajusté, à partir des résultats d'une procédure GLM ?
Auteurs : steelspirit - datametric - oncle_pete - oncle_pete - rastoix - bahraoui - raf64flo - fafabzh6 - Fleur
Anne Blain - ash_rmy - SAS - green_fr
Le R² ajusté n'est pas fourni en standard.
- 106 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Vous pouvez l'obtenir, à partir des résultats de la procédure GLM en utilisant l'ODS et une étape data comme
dans l'exemple suivant :
data iron;
input fe loss @@;
datalines;
0.01 127.6 0.48 124.0 0.71 110.8 0.95 103.9
1.19 101.5 0.01 130.1 0.48 122.0 1.44 92.3
0.71 113.1 1.96 83.7 0.01 128.0 1.44 91.4
1.96 86.2
;
data rsq;
merge fit_ds anova nobs;
m=df+1;
adj_rsq=1-(1-rsquare)*((nvalue1-1)/(nvalue1-m)); /* calcul du R2 ajusté */
keep dependent rsquare adj_rsq;
proc print;
run;
- 107 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Exemple :
DATA yeux;
INPUT couleur $ sexe poids @@;
CARDS;
bleu 1 10 bleu 2 20
vert 1 50 vert 2 60
marron 1 25 marron 2 40
;
RUN;
La table de départ 'essai' est de type individus(id)*variables (voit, prof, situ, age), avec des variables
alphanumériques.
/* créer la table des fréquences des modalités des variables par individu (0 ou 1)*/
proc corresp data=essai outf=freqs noprint;
tables id, voit prof situ age;
- 108 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
run;
a une table de contingence : en ligne, les modalités de la variable A ; en colonne, les modalités de la
variable B ;
b une table individus * variables : la procédure construit elle-même la table de contingence.
Dans les deux cas, il n'y a pas de résultats sur les individus.
a un tableau disjonctif complet : option MCA inutile ; résultats relatifs aux individus ;
b une table de Burt : option MCA nécessaire ; pas de résultat relatif aux individus ;
c une table individus * variables : option MCA : la procédure construit la table de Burt (cas 2) ; pas
d'option MCA : la procédure construit un tableau disjonctif (cas 1).
Remarque :
L'option MCA indique une ACM, le tableau analysé doit être une table de Burt. Si cette option est absente
et que l'analyse est effectuée sur une table de Burt, la procédure n'indiquera pas d'erreur mais les valeurs
- 109 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
propres et les coordonnées seront celles de l'AFC du tableau de Burt (Les valeurs propres sont élevées au
carré et les coordonnées sont multipliées par la racine des valeurs propres).
La méthode consiste à faire une analyse des correspondances multiples (ACM) sur le tableau disjonctif
complet des variables nominales (à l'aide de la procédure Corresp).
Cette méthode est connue sous le nom de méthode Disqual (Saporta, 1977).
Il ne reste plus qu'à utiliser ces variables quantitatives avec l'une des procédures du Système SAS® qui
permet de faire de l'analyse discriminante (procédure Discrim ou procédure Candisc).
Cette méthode requiert donc la réalisation de l'Analyse des Correspondances Multiples sur tableau
disjonctif complet. Or, l'analyse sur tableau disjonctif complet est très coûteuse, voire parfois impossible
à cause de limitations des capacités informatiques.
Alors, la meilleure solution est de tirer parti de la formule de reconstitution des données : il s'agit dans un
premier temps d'effectuer l'analyse sur le tableau de Burt, ce qui a pour inconvénient de ne pas restituer les
coordonnées des individus sur les axes. Puis de calculer ces coordonnées à l'aide de la formule suivante : à
- 110 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
un facteur 1/racine (valeur propre de l'axe concerné) près, la coordonnée d'un individu sur un axe est égale
à la somme arithmétique simple des coordonnées des catégories auxquelles il appartient sur ce même axe.
Les données d'entrée sont soit une matrice de corrélation (TYPE = CORR,UCORR), soit une matrice de
variances-covariances (TYPE = COV, UCOV).
Exemple:
data correl(type=corr);
input _TYPE_ $ 1-6 _NAME_ $ @11 x y z;
datalines;
CORR x 1.0 . .
CORR y .7 1.0 .
CORR z .5 .4 1.0
WEIGHT 5 3 1
;
proc factor weight;
run;
- 111 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
Attention à ne pas confondre l'option WEIGHT qui permet de pondérer les variables avec l'instruction
WEIGHT qui permet de pondérer les individus.
- 112 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
La FAQ SAS
PROC PHREG ;
MODEL t2*c(1) = / ENTRYTIME = t1 ;
OUTPUT OUT = out1 SURVIVAL = sdf ;
RUN ;
t2 est le temps de survie, t1 est le temps de troncature et c est l'indicateur de censure (une valeur de 1
indique les observations censurées). La variable sdf de la table OUT1 contient les estimateurs souhaités.
Vous trouverez plus d'informations sur cette procédure dans l'aide en ligne, à l