Making SAS Interactive (Part 2): Using %window and %display

This post was kindly contributed by SASopedia - go there to comment and to read the full post.

Its the world of GUI. And you are left nowhere if you don’t provide the users, the luxury (or rather fulfill the basic needs) of giving a Graphical User Interface. This holds good even for SAS.

SAS came up with the tool called SAS/AF and SAS EG which provides the users with a brilliant GUI and thus making their lives so eeaasssy.. However, not many of us would have bumped into this brilliant macro tool called %WINDOW and %DISPLAY which is present in BASE SAS9 which satisfies the basic needs of having a GUI. Here I take a small dive into the SAS ocean again, exploring the functionalities of these two macros.

%WINDOW: This creates the basic window that needs to be popped up upon execution. We can specify the window attributes here like the color/width/height,etc. You could also specify the position of the text that is to be displayed and the input parameters that are to be read.

%DISPLAY: This actually invokes the window that has been defined in the %window program.

Below is a simple illustration of the %window and %display invocation:

%window test_win color=blue

/*dimension for the window*/
icolumn=15 irow=10
columns=90 rows=45

/*Content of the window*/
#3 @25 “My Window”
attr = rev_video
#5 @10 “Hello Pramod”
attr = underline
;

%display test_win;

The above code displays the output as shown below:

Below, I’ve demonstrated how we can use this to make SAS interactive. Most of the code is self explanatory, of course with a bit of help from the support.sas.com documentation available at: http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a000206734.htm

/* Main window */

%window final color=gray

/*dimension for the window*/
icolumn=15 irow=10
columns=90 rows=75

/*Content of the window*/
#1 @25 “&error_msg”
#3 @15 “Hi &sysuserid.” attr = rev_video color=blue @60 “Date: &sysdate9.” attr = rev_video color=blue
#5 @25 “Welcome to the Reporting World” attr = rev_video

#8 @35 “Report List”
#11 @15 “1. Class listing” @50 “2. Class Report by Gender”
#13 @15 “3. Class Report by Age” @50 “4. Class freq”
#16 @15 “Enter your Choice:” @35 choice attr=underline
;

/* End of Window Final */

%macro execute;
%let choice=;%display final;

%if &choice=1 %then %do;
 proc print data=sashelp.class noobs;
 run;
%end;
%else %if &choice=2 %then %do;
 proc report data=sashelp.class nowd;
 columns sex height weight;
 define sex / group;
 define height /analysis;
 define weight / analysis;
 run;
%end;
%else %if &choice=3 %then %do;
 proc report data=sashelp.class nowd;
 columns age height weight;
 define age / group;
 define height /analysis;
 define weight / analysis;
 run;
%end;
%else %if &choice=4 %then %do;
 proc freq data=sashelp.class;
 tables sex*age /nocum nopercent;
 run;
%end;
%mend execute;

%execute
In the above code, I first display a list of things the use might be interested to see in the %window, and then %display this inside the macro execute. I also read his input into the macro variable choice and then based on his selection, I call the required procedure inside the macro execute.

The output of the above code is as shown below:

Upon entering the value 2 and hitting the enter button, we get the output as shown:

You could experiment more on this and let me know your suggestions/thoughts/ideas…

This post was kindly contributed by SASopedia - go there to comment and to read the full post.