diff --git a/packages/README.md b/packages/README.md
index 9b0c790..5161334 100644
--- a/packages/README.md
+++ b/packages/README.md
@@ -86,7 +86,7 @@ SHA256 digest for macroArray: F*3F3893F1FCD78719543703E4353F4CC19811D247C016F220
---
-- **BasePlus**\[2.1.0\] adds a bunch of functionalities I am missing in BASE SAS, such as:
+- **BasePlus**\[2.3.1\] adds a bunch of functionalities I am missing in BASE SAS, such as:
```sas
call arrMissToRight(myArray);
call arrFillMiss(17, myArray);
@@ -118,7 +118,7 @@ format x bool.;
%put #%expandDataSetsList(lib=sashelp,datasets=_all_)#;
```
-SHA256 digest for BasePlus: F*DFA83F8E0D7424DEB63D49620392068BC68D766552E2804CB6B01DE8E5A87769
+SHA256 digest for BasePlus: F*B2D318DD9708D74E5A7C419F7CAE1BF46D662B7F6AEE7E6B1B9D9B6858A5C41A
[Documentation for BasePlus](https://github.com/SASPAC/blob/main/baseplus.md "Documentation for BasePlus")
diff --git a/packages/SHA256_for_packages.txt b/packages/SHA256_for_packages.txt
index d817259..d56eb18 100644
--- a/packages/SHA256_for_packages.txt
+++ b/packages/SHA256_for_packages.txt
@@ -1,3 +1,9 @@
+/* 20250805 */
+BasePlus: F*B2D318DD9708D74E5A7C419F7CAE1BF46D662B7F6AEE7E6B1B9D9B6858A5C41A
+
+/* 20250804 */
+BasePlus: F*71DC1AFA709B2977E8AEA452721776F62EEC8240ABD658AC83AA6D4310FC49B6
+
/* 20240909 */
BasePlus: F*DFA83F8E0D7424DEB63D49620392068BC68D766552E2804CB6B01DE8E5A87769
diff --git a/packages/baseplus.md b/packages/baseplus.md
index 1df12f7..1d0f359 100644
--- a/packages/baseplus.md
+++ b/packages/baseplus.md
@@ -9,22 +9,22 @@
### Version information:
- Package: BasePlus
-- Version: 2.1.0
-- Generated: 2024-09-09T12:55:04
+- Version: 2.3.1
+- Generated: 2025-08-05T20:07:24
- Author(s): Bartosz Jablonski (yabwon@gmail.com), Quentin McMullen (qmcmullen@gmail.com)
- Maintainer(s): Bartosz Jablonski (yabwon@gmail.com)
- License: MIT
-- File SHA256: `F*DFA83F8E0D7424DEB63D49620392068BC68D766552E2804CB6B01DE8E5A87769` for this version
-- Content SHA256: `C*AB16F5B6538515607C3C254E401DC1ACA7293AB36990227F6E7792145CEEAB87` for this version
+- File SHA256: `F*B2D318DD9708D74E5A7C419F7CAE1BF46D662B7F6AEE7E6B1B9D9B6858A5C41A` for this version
+- Content SHA256: `C*C34B47FDC4A22C5F5EACA087FA5308B97C367E8B7C32C5B28D37B491C6DAA9A3` for this version
---
-# The `BasePlus` package, version: `2.1.0`;
+# The `BasePlus` package, version: `2.3.1`;
---
-# The BasePlus package [ver. 2.1.0] ###############################################
+# The BasePlus package [ver. 2.3.1] ###############################################
The **BasePlus** package implements useful
functions and functionalities I miss in the BASE SAS.
@@ -403,7 +403,7 @@ localization (only if additional content was deployed during the installation pr
--------------------------------------------------------------------
-*SAS package generated by SAS Package Framework, version `20240711`*
+*SAS package generated by SAS Package Framework, version `20250729`*
--------------------------------------------------------------------
@@ -989,7 +989,12 @@ The QgetVars() returns quoted value [by %superq()].
See examples below for the details.
-The `%getVars()` macro executes like a pure macro code.
+When `mcArray=` is not used the `%getVars()` macro executes like
+a pure macro code. When `mcArray=` is not null (creation of a
+macro variable array is requested) them a single semicolon is returned.
+
+When `validvarname=ANY` in set special care should be kept.
+See dedicated examples below.
### SYNTAX: ###################################################################
@@ -1003,6 +1008,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
<,quote=>
<,mcArray=>
<,ignoreCases>
+ <,nlit=>
)
~~~~~~~~~~~~~~~~~~~~~~~
@@ -1025,23 +1031,32 @@ The basic syntax is the following, the `<...>` means optional parameters:
* `mcArray=` - *Optional*, default value is blank.
1) When *null* - the macro behaves like a macro function
- and returns a text string with variables list.
- 2) When *not null* - behaviour of the macro is altered.
+ and ban be used in the `%put` or `%let=` statements.
+ The returned text is a string with variables list.
+ 2) When *not null* - behavior of the macro is altered.
In such case a macro array of selected variables, named
with `mcArray` value as a prefix, is created.
Furthermore a macro named as `mcArray` value is generated.
(see the macroArray package for the details).
When `mcArray=` parameter is active the `getVars` macro
- cannot be called within the `%put` statement. Execution like:
- `%put %getVars(..., mcArray=XXX);` will result with
- an Explicit & Radical Refuse Of Run (aka ERROR).
+ should not be called within the `%put` or `%let=` statements.
+ A single semicolon is produced as the macro result, hence
+ execution like: `%put %getVars(..., mcArray=XXX) some text;`
+ will result with an Explicit & Radical Refuse Of Run (aka ERROR).
-* `ignoreCases=` - *Optional*, default value is 1.
+* `ignoreCases=` - *Optional*, default value is 1.
Indicates if search should be case insensitive.
+* `nlit=` - *Optional*, default value is 0.
+ Introduced to improve `validvarname=ANY` handling.
+ Indicates if the `NLITERAL()` function should be
+ executed to cover spacial characters.
+
### EXAMPLES AND USECASES: ####################################################
+**When `validvarname=` option is _not_ `ANY`.**
+
**EXAMPLE 1.** A list of all variables from the
sashelp.class dataset:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
@@ -1267,6 +1282,44 @@ run;
%put %do_over(XYZ);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**When the `validvarname=ANY` option is set.**
+
+**EXAMPLE 12.** Get all variables and handle special characters.
+ Without `nlit=1` the code will fail.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+ options validvarname = any;
+ data varnameANY;
+ set sashelp.class(obs=3);
+
+ 'A&B'n=42;
+ 'space name'n=101;
+ '2025-08'n=234;
+ '2025%09'n=235;
+ "2025'10"n=236;
+ '2025"11'n=237;
+ run;
+
+ %put %getVars(varnameANY, nlit=1);
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**EXAMPLE 13.** Create macro variable array ABC for all variables.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+ %getVars(varnameANY, mcArray=ABC, nlit=1);
+ %put %ABC(1) %ABC(6) %ABC(7) %ABC(11);
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**EXAMPLE 14.** Get only variables with illegal characters in names.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+ %let notV7compliant = %getVars(varnameANY, pattern=[^a-z0-9_], nlit=1);
+ %put ¬V7compliant.;
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+**EXAMPLE 14.** Print variables starting with a digit.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+ %put %getVars(varnameANY, pattern=^\d, nlit=1);
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
---
@@ -1929,6 +1982,11 @@ The basic syntax is the following, the `<...>` means optional parameters:
* `ignoreCases=` - *Optional*, default value is 1.
Indicates if search should be case insensitive.
+* `nlit=` - *Optional*, default value is 0.
+ Introduced to improve `validvarname=ANY` handling.
+ Indicates if the `NLITERAL()` function should be
+ executed to cover spacial characters.
+
### EXAMPLES AND USECASES: ####################################################
@@ -6395,7 +6453,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
3. `false` - *Required*, value returned when condition is false.
-4 `v=` - *Optional*, v for verbose. If set to `1` extra notes
+* `v=` - *Optional*, v for verbose. If set to `1` extra notes
are printed.
---
@@ -7598,7 +7656,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
# License ######
-Copyright (c) 2020 - 2024 Bartosz Jablonski
+Copyright (c) 2020 - 2025 Bartosz Jablonski
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/packages/baseplus.zip b/packages/baseplus.zip
index b090ebc..b6a1e90 100644
Binary files a/packages/baseplus.zip and b/packages/baseplus.zip differ