Developing SAS Applications : A summary of the Options
-
SAS-centric Solutions.
-
Window/Display
and %Window/%Display Data step language statements.
These windowing statements allow data step programs to provide simple
windowing, providing input prompts into a running data step or macro program.
Requires: Base SAS
Remarks: Syntax doesn't fit well with standard data step programming logic. Limited control of user interface.
-
SAS/AF
The 'traditional' means of providing end-user application front-ends to SAS System functionality. Fully functional, object oriented development environment contained within the SAS System environment.
Requires: Base SAS, SAS/Graph* at least to run an application, SAS/AF is required in addition to develop applications.
Remarks: Considered 'mature' by SAS. Some are critical of the development environment as well as the general look and feel of the application 'real estate' ( the icons, buttons,etc.). The IDE (integrated development environment) isn't visually as pleasing as AppDev Studio or other modern IDE's. Some lack of clarity of status of continued development of the toolset.
* SAS/Graph is required, IIRC for applications built with 'Frame' entries.
-
AppDev Studio
Fully fledged Java-oriented IDE for developing enterprise-standard GUIs surfacing SAS System functionality.
Requires: AppDev Studio is a bundle of SAS System products (includes SAS/Intrnet IIRC) as well as the Java IDE.
Remarks: Considered expensive? Although this should be considered in the context of other 'Enterprise' software development toolsets. AppDev Studio Lite anyone? (if there are any birdies listening . Learning curve quite steep without prior Java knowledge.
-
SAS/Intrnet
Provides ability to submit SAS data step/ PROCs and SCL from behind HTML
pages.
Requires: SAS/Intrnet is another 'bundle' of functionality, effectively application server components from SAS that integrate with a web server.
Remarks: Robust technology, works well and fits well with legacy SAS code.
-
SAS 9 - Java Integration.
In SAS 9 there is an interface to Java. Jack Hamilton kindly pointed this out as well as providing this link to an example on the SAS Support pages.
Requires: Base SAS and Java.
Remarks: Similar in concept to the %windows/windows statements in the sense that a datastep is controlling the processing.
-
SAS Integration Technologies solutions.
-
.Net
There are two main ways of accessing the SAS System from .Net, Windows applications or Web Applications written in ASP.Net. With both types the principles are the same: namely that where the SAS Server is running/installed on the same machine as the application the Integration Technologies facilities come with Base SAS*. (In the case of web applications written in ASP.Net, if the web server and
SAS Server are on the same physical machines the Integration Technologies facilities included with Base SAS.)
Remarks: The addition of a SAS/Integration Technologies license means that
Windows apps written in .Net languages can access SAS facilities on a remote server, and web applications can run on a separate physical machine from the web server.
* One difference is that in SAS 8.2 the engine allowed read/write access to SAS data whereas with v9 the SAS/IT product needs to be licensed for read/write access to SAS datasets.
-
Java
Aside from AppDev Studio, native Java IDE's could be used to access
SAS/Integration Technologies functionality in a similar fashion to that described for .Net.
Remarks: The Java API to SAS/Integration Technologies requires a SAS/IT license.
There's an excellent SUGI paper from a few years back by a certain Ted Conway called 'A Better Desktop than Windows' on using Excel with VBA as a means of documenting the location of SAS program code and executing the code from within Excel.
Remarks: Not sure if it's fair to call this an 'application development' choice ..... but nevertheless a valid and useful technique.
If you're aware of any other issues or methods of delivering SAS System functionality in an application to users, please email me at appdev@webminer.co.uk and I will update this document as appropriate.