Publié le :
Macro EXTERNE

Macro de Fenêtrage pour PROC PRINT

Ce code est également disponible en : Deutsch English Español
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é !
1PROC 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 
13QUIT;
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é !
1%let msg=Press ENTER to continue.;
2 
3%window dsn columns=80 rows=20 menu=orion.menus.exit
4 
5 #3 @ 6 'Data Set: ' dsn 41 attr=underline required=yes
6 #5 @ 6 'Press ENTER to continue.' msg protect=yes;
7 
8%window var columns=80 rows=20 menu=orion.menus.exit
9 
10 #3 @ 6 'Data Set: ' dsn 41 attr=underline protect=yes
11 #5 @ 6 'Variables: ' var 41 attr=underline
12 #7 @ 6 'Press ENTER to continue.' msg protect=yes;
13 
14%window opt columns=80 rows=20 menu=orion.menus.exit
15 
16 # 3 @ 6 'Data Set: ' dsn 41 attr=underline protect=yes
17 # 5 @ 6 'Variables: ' var 41 attr=underline protect=yes
18 # 7 @ 6 '# of obs: ' obs 2 attr=underline
19 # 9 @ 6 'Suppress Obs #s (Y or N): ' sup 1 attr=underline
20 #10 @ 6 'Double Space (Y or N): ' dbl 1 attr=underline
21 #11 @ 6 'Column Labels (Y or N): ' lab 1 attr=underline
22 #14 @ 6 'Press ENTER to continue.' msg protect=yes;
23 
24 %window err columns=80 rows=20 menu=orion.menus.exit
25 
26 #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.
Copié !
1%macro printwindow;
2 
3 %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 PRINT DATA=&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é !
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.