Technology Tales

Notes drawn from experiences in consumer and enterprise technology

15:19, 4th October 2018

SAS Add-In 8 for Microsoft Office: User’s Guide

The SAS Add-In 8 for Microsoft Office documentation provides a user guide covering new features, an introduction and setup guidance, everyday use and customisation, and working with Excel data, SAS data sources, OLAP data, tasks, reports, programs, documents in SAS folders, results and content management, alongside related task references, a developer’s guide, desktop application information, accessibility details and other resources.

16:12, 20th September 2018

Use an Easy PowerShell Command to Search Files for Information

Windows PowerShell's Select-String command offers a straightforward way to search through multiple files in a folder without the need to write a dedicated script. This works well with plain file formats, but struggles with complex formats like those produced by Microsoft Word, often returning garbled output. By specifying file extensions using wildcard characters in the path parameter, users can target specific file types and avoid those issues. Both the path and pattern parameters accept arrays of strings, meaning several file types and search terms can be queried simultaneously in a single command. For greater control over which files are included in a search, the Get-ChildItem command can be piped into Select-String, allowing for recursive directory searches and more precise filtering by file type. This approach proves particularly useful when analysing log files, where patterns such as "fail", "success" and "pending" can be searched for together to build a clearer picture of recorded events across multiple files.

17:11, 8th September 2018

Using LIBNAME XLSX to read and write Excel files

Introduced in SAS 9.4 Maintenance 2, the XLSX engine allows users to read and write Microsoft Excel files directly as though they were data sets in a library, without relying on Microsoft data APIs, which means it functions on both Windows and Unix systems without concerns over 32-bit versus 64-bit compatibility or the need for a separate PC Files Server process. It does require a licence for SAS/ACCESS to PC Files, though this is included in SAS OnDemand for Academics. Once a library is assigned using the engine, users can browse sheet names, read specific sheets into SAS data sets and control how much data are imported using options such as FIRSTOBS and OBS. The engine can also be used to create and update XLSX files, with each SAS data set written as a separate sheet. However, there are notable limitations to be aware of, including no support for Excel named ranges, no dollar sign decoration around sheet names and a sequential access model that prevents certain in-place data modification techniques.

17:50, 3rd September 2018

New SAS transport format and tools available

SAS introduced an updated transport format, offering enhanced capabilities compared to the older V5 version, including support for longer variable names, extended character lengths, more flexible naming conventions and increased label lengths. This format is managed through macros such as LOC2XPT and XPT2LOC, which facilitate the conversion between SAS datasets and transport files. Despite these advancements, the V5 format remains necessary for regulatory submissions in the biopharmaceutical sector. The new format is compatible with a wide range of operating systems, and users can integrate the associated macros into their SAS environments for streamlined data handling.

17:09, 10th August 2018

Jurassic SAS in the BI/EBI World

Don Henderson's blog explores how SAS Server Pages and PROC STREAM can be used beyond their original purpose in stored processes and web applications, extending their utility to standard batch processing environments such as SAS Display Manager and SAS Enterprise Guide. A central theme across several posts is the development of a reusable tag cloud macro that generates graphical HTML displays of business intelligence data, using the JQuery-based JQCloud widget to render word clouds where the size of each word reflects the magnitude of an analysis variable. The blog traces the evolution of this macro from a straightforward single-cloud implementation to one supporting a BY variable, allowing a separate cloud to be generated for each distinct value of a grouping variable within a single output file. Alongside this, Henderson details a reusable AJAX container framework built on JQuery that enables dynamic, page-refreshing-free interaction with stored process outputs, including drill-down functionality triggered by clicking words in the cloud. Supporting components such as parameterised HTML forms, JSON-generating macros using SCL data access functions and footer pages are described in depth, illustrating how the architecture can be adapted for different datasets and display requirements. The author argues that tag clouds offer a more visually engaging alternative to bar charts and pie charts for representing business intelligence data, and positions the entire framework as a flexible, extensible foundation for web-based reporting in SAS environments.

17:07, 10th August 2018

Five things you (probably) don’t know you can do with a hash table in SAS

Hash tables in SAS are versatile tools capable of performing tasks beyond basic table lookups, such as supporting create, read, update and delete operations similar to a database, enabling data aggregation across multiple levels with minimal processing steps and allowing for parametrisation through macro language or data-driven techniques. They can manage memory constraints effectively using partitioning methods and often offer efficiency advantages over traditional SAS approaches for data management. These capabilities are explored in detail in a book authored by a SAS consultant with extensive experience in data warehouse and business intelligence applications, highlighting practical implementations and code examples.

13:42, 22nd July 2018

Windows Environment Variables

Environment variables in Windows are used to store configuration settings and paths, often accessed within batch files or command-line sessions and can be temporarily adjusted using the SET command or permanently modified with SETX. Common examples include %AppData%, %LocalAppData% and %Temp%, which point to user-specific directories, while others like %SystemRoot% and %ProgramFiles% reference system-wide locations. These variables are enclosed in percent signs and may contain letters, numbers and special characters, though they cannot begin with a numeral. Dynamic variables update automatically during use, while volatile ones are session-specific and stored in memory.

Environment variables are stored in the Windows registry under user or system settings and their precedence during process execution follows a defined order, with system variables taking priority over user-defined ones. Security considerations advise against using them for sensitive data, as inherited variables may expose information in crash logs or other contexts. Custom variables are often prefixed with an underscore or dollar sign to avoid conflicts with built-in names and tools like SET and SETX facilitate their management, though undocumented variables exist for advanced use cases.

22:37, 28th June 2018

Summary of SAS Macro Quoting Functions and the Characters They Mask

Unquoting Text

Macro quoting functions in SAS are used to mask special characters and symbols so they are treated as text rather than as part of the macro language. When an item is masked, its significance is typically restored automatically when it is passed to other parts of the SAS system, but manual unquoting may be required in specific cases. This is necessary if the masked value needs to retain its original meaning within the same macro, or if the way the word scanner processes the text leads to unexpected results. The %UNQUOTE function is employed to reverse the masking effect, allowing symbols to be interpreted correctly in contexts such as comparisons or data processing. Different macro quoting functions mask varying sets of characters, with some operating during compilation and others during execution, depending on the specific requirements of the task.

10:13, 25th June 2018

Unicode Consortium

The Unicode Consortium aims to ensure global access to language use on digital devices, offering technical resources such as standards, code charts and documentation, alongside opportunities for organisational and individual membership, character adoption and donations. It provides information on governance, licensing and intellectual property policies, along with updates on events, news and public engagement initiatives, supported by a global network of contributors and stakeholders.

12:23, 8th June 2018

Apache Groovy
Grails

Apache Groovy is a versatile, Java-like programming language for the JVM that combines dynamic and static typing to enhance developer productivity, offering features such as closures, meta-programming and support for domain-specific languages. It integrates seamlessly with Java and third-party libraries, enabling the creation of scripts, applications and testing tools with a syntax familiar to Java developers. Built on Groovy, the Grails framework provides a web application development environment leveraging Spring Boot, with conventions that simplify configuration and support for REST APIs, asynchronous programming and front-end technologies like React and Angular. Both Groovy and Grails benefit from a rich ecosystem of plugins, tools and community resources and are maintained as open-source projects under the Apache Software Foundation, fostering collaboration and innovation in JVM-based software development.

  • The content, images, and materials on this website are protected by copyright law and may not be reproduced, distributed, transmitted, displayed, or published in any form without the prior written permission of the copyright holder. All trademarks, logos, and brand names mentioned on this website are the property of their respective owners. Unauthorised use or duplication of these materials may violate copyright, trademark and other applicable laws, and could result in criminal or civil penalties.

  • All comments on this website are moderated and should contribute meaningfully to the discussion. We welcome diverse viewpoints expressed respectfully, but reserve the right to remove any comments containing hate speech, profanity, personal attacks, spam, promotional content or other inappropriate material without notice. Please note that comment moderation may take up to 24 hours, and that repeatedly violating these guidelines may result in being banned from future participation.

  • By submitting a comment, you grant us the right to publish and edit it as needed, whilst retaining your ownership of the content. Your email address will never be published or shared, though it is required for moderation purposes.