Ce script définit d'abord une série de fenêtres modales avec PROC PMENU et %WINDOW pour créer une interface utilisateur. La macro %printwindow orchestre ensuite l'interaction : elle demande à l'utilisateur de saisir un nom de jeu de données, valide son existence, demande une liste de variables (optionnelle) et valide leur présence, puis demande des options de formatage pour PROC PRINT (nombre d'observations, suppression des numéros, etc.). Enfin, elle assemble et exécute dynamiquement une étape PROC PRINT basée sur toutes les informations collectées.
Analyse des données
Type : EXTERNE
Le script est conçu pour opérer sur n'importe quel jeu de données SAS dont le nom est fourni interactivement par l'utilisateur via une fenêtre de saisie. L'existence du jeu de données est validée au moment de l'exécution.
1 Bloc de code
PROC PMENU
Explication : Cette procédure définit une structure de menu nommée 'exit' dans le catalogue orion.menus. Ce menu est utilisé par les fenêtres interactives pour offrir des options de sortie ('OK', 'Cancel') et associe des actions à ces sélections.
Copié !
proc pmenu catalog=orion.menus;
menu exit;
item 'Exit' menu=x;
menu x;
item 'OK' selection=y;
item 'Cancel' selection=z;
selection y 'end';
selection z 'command focus';
quit;
1
PROC PMENU catalog=orion.menus;
2
menu exit;
3
item 'Exit' menu=x;
4
5
menu x;
6
7
item 'OK' selection=y;
8
item 'Cancel' selection=z;
9
10
selection y 'end';
11
selection z 'command focus';
12
13
QUIT;
2 Bloc de code
%WINDOW
Explication : Déclare quatre fenêtres modales (dsn, var, opt, err) qui serviront d'interface utilisateur pour la saisie des paramètres. Chaque fenêtre a une disposition spécifique pour afficher du texte et des champs de saisie pour le nom du jeu de données, les variables, les options d'impression, ou pour afficher des messages d'erreur.
Copié !
%let msg=Press ENTER to continue.;
%window dsn columns=80 rows=20 menu=orion.menus.exit
#3 @ 6 'Data Set: ' dsn 41 attr=underline required=yes
#5 @ 6 'Press ENTER to continue.' msg protect=yes;
%window var columns=80 rows=20 menu=orion.menus.exit
#3 @ 6 'Data Set: ' dsn 41 attr=underline protect=yes
#5 @ 6 'Variables: ' var 41 attr=underline
#7 @ 6 'Press ENTER to continue.' msg protect=yes;
%window opt columns=80 rows=20 menu=orion.menus.exit
# 3 @ 6 'Data Set: ' dsn 41 attr=underline protect=yes
# 5 @ 6 'Variables: ' var 41 attr=underline protect=yes
# 7 @ 6 '# of obs: ' obs 2 attr=underline
# 9 @ 6 'Suppress Obs #s (Y or N): ' sup 1 attr=underline
#10 @ 6 'Double Space (Y or N): ' dbl 1 attr=underline
#11 @ 6 'Column Labels (Y or N): ' lab 1 attr=underline
#14 @ 6 'Press ENTER to continue.' msg protect=yes;
%window err columns=80 rows=20 menu=orion.menus.exit
#3 @ 6 'Data Set ' c=red dsn p=yes c=red attr=rev_video
' does not exist.' c=red
#5 @ 6 'Enter Y to try again or N to stop: '
try 1 attr=underline
#7 @ 6 'Press ENTER to continue.' msg protect=yes;
#3 @ 6'Data Set ' c=red dsn p=yes c=red attr=rev_video
27
' does not exist.' c=red
28
29
#5 @ 6'Enter Y to try again or N to stop: '
30
try 1 attr=underline
31
32
#7 @ 6'Press ENTER to continue.' msg protect=yes;
3 Bloc de code
Macro
Explication : Le cœur du script. Cette macro gère le flux interactif : elle affiche les fenêtres pour collecter les entrées de l'utilisateur, valide l'existence du jeu de données et des variables à l'aide de fonctions %sysfunc, construit dynamiquement les options et l'instruction VAR pour PROC PRINT, et exécute le rapport.
%local dsn var vars dsid rc obs sup dbl lab supx dblx labx try msg;
4
%let msg=Press ENTER to continue.;
5
%let sysmsg=Enter dataset name.;
6
%display dsn;
7
%let dsn=%upcase(&dsn);
8
9
%DO %while(%sysfunc(exist(&dsn))=0);
10
%let dsn=%upcase(&dsn);
11
%let try=;
12
%display err;
13
%IF %upcase(&try)=Y %THEN %display dsn;
14
%ELSE %DO;
15
%put ERROR: Dataset &dsn does not exist.;
16
%return;
17
%END;
18
%END;
19
20
%let sysmsg=Enter variable names or leave blank.;
21
%display var;
22
23
%IF &var ne %THEN %DO;
24
%let dsid=%sysfunc(open(&dsn(keep=&var)));
25
%let rc=%sysfunc(close(&dsid));
26
%let var=%upcase(&var);
27
%IF &dsid=0 %THEN %DO;
28
%put ERROR: Variables(&var) not in &dsn..;
29
%return;
30
%END;
31
%let vars=var &var;
32
%END;
33
34
%let sysmsg=Select options.;
35
%display opt;
36
37
%IF &obs ne %THEN %let obs=(obs=&obs);
38
%IF %upcase(&sup)=Y %THEN %let supx=noobs;
39
%IF %upcase(&dbl)=Y %THEN %let dblx=double;
40
%IF %upcase(&lab)=Y %THEN %let labx=label;
41
42
PROC PRINTDATA=&dsn &obs &supx &dblx &labx;
43
&vars;
44
title "&dsn";
45
RUN;
46
title;
47
48
%put NOTE: Processing complete.;
49
50
%mend printwindow;
4 Bloc de code
Macro Call
Explication : Exécute la macro %printwindow, lançant ainsi le processus interactif de génération de rapport.
Copié !
%printwindow
1
%printwindow
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.