diff --git a/README.md b/README.md
index a431823..b5e1506 100644
--- a/README.md
+++ b/README.md
@@ -224,7 +224,7 @@ SHA256 digest for macroArray: F*85E3BE4D163AC5223B6EC9D3C25C46564A656E3830998B45
[MacroArray in SASPAC](https://github.com/SASPAC/macroarray "MacroArray in SASPAC")
-- **BasePlus**\[1.20.0\] adds a bunch of functionalities I am missing in BASE SAS, such as:
+- **BasePlus**\[1.23.0\] adds a bunch of functionalities I am missing in BASE SAS, such as:
```sas
call arrMissToRight(myArray);
call arrFillMiss(17, myArray);
@@ -248,7 +248,7 @@ format x bool.;
%put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$);
```
-SHA256 digest for BasePlus: F*F39F38CE80A5D8EED3BC9F2413CD6DEF38E8657E5DCF427CBA8938EB8C4350B6
+SHA256 digest for BasePlus: F*625E56B017C4AA8D436959C0A03C8503773A9A3823D43FA9E0326276E52DA6F2
[Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md "Documentation for BasePlus")
diff --git a/packages/README.md b/packages/README.md
index 9a328e9..fad63a6 100644
--- a/packages/README.md
+++ b/packages/README.md
@@ -86,7 +86,7 @@ SHA256 digest for macroArray: F*85E3BE4D163AC5223B6EC9D3C25C46564A656E3830998B45
---
-- **BasePlus**\[1.20.0\] adds a bunch of functionalities I am missing in BASE SAS, such as:
+- **BasePlus**\[1.23.0\] adds a bunch of functionalities I am missing in BASE SAS, such as:
```sas
call arrMissToRight(myArray);
call arrFillMiss(17, myArray);
@@ -110,7 +110,7 @@ format x bool.;
%put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$);
```
-SHA256 digest for BasePlus: F*F39F38CE80A5D8EED3BC9F2413CD6DEF38E8657E5DCF427CBA8938EB8C4350B6
+SHA256 digest for BasePlus: F*625E56B017C4AA8D436959C0A03C8503773A9A3823D43FA9E0326276E52DA6F2
[Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md "Documentation for BasePlus")
diff --git a/packages/SHA256_for_packages.txt b/packages/SHA256_for_packages.txt
index 3f567b5..ebd3b1f 100644
--- a/packages/SHA256_for_packages.txt
+++ b/packages/SHA256_for_packages.txt
@@ -1,3 +1,6 @@
+/* 20230419 */
+BasePlus: F*625E56B017C4AA8D436959C0A03C8503773A9A3823D43FA9E0326276E52DA6F2
+
/* 20230417 */
BasePlus: F*F39F38CE80A5D8EED3BC9F2413CD6DEF38E8657E5DCF427CBA8938EB8C4350B6
diff --git a/packages/baseplus.md b/packages/baseplus.md
index 55c4433..c660ca3 100644
--- a/packages/baseplus.md
+++ b/packages/baseplus.md
@@ -52,6 +52,9 @@
* [`%bpPIPE()` macro](#bppipe-macro)
* [`%dirsAndFiles()` macro](#dirsandfiles-macro)
* [`%repeatTxt()` macro](#repeattxt-macro)
+ * [`%intsList()` macro](#intslist-macro)
+ * [`%splitDSIntoBlocks()` macro](#splitdsintoblocks-macro)
+ * [`%splitDSIntoParts()` macro](#splitdsintoparts-macro)
* [License](#license)
@@ -248,50 +251,54 @@ Package contains:
6. macro dirsandfiles
7. macro functionexists
8. macro getvars
-9. macro ldsn
-10. macro ldsnm
-11. macro lvarnm
-12. macro lvarnmlab
-13. macro qdeduplistx
-14. macro qgetvars
-15. macro qzipevalf
-16. macro raincloudplot
-17. macro repeattxt
-18. macro symdelglobal
-19. macro unziplibrary
-20. macro zipevalf
-21. macro ziplibrary
-22. format bool
-23. format boolz
-24. format ceil
-25. format floor
-26. format int
-27. functions arrfill
-28. functions arrfillc
-29. functions arrmissfill
-30. functions arrmissfillc
-31. functions arrmisstoleft
-32. functions arrmisstoleftc
-33. functions arrmisstoright
-34. functions arrmisstorightc
-35. functions bracketsc
-36. functions bracketsn
-37. functions catxfc
-38. functions catxfi
-39. functions catxfj
-40. functions catxfn
-41. functions deldataset
-42. functions semicolonc
-43. functions semicolonn
-44. format brackets
-45. format semicolon
-46. proto qsortincbyprocproto
-47. functions frommissingtonumberbs
-48. functions fromnumbertomissing
-49. functions quicksort4notmiss
-50. functions quicksorthash
-51. functions quicksorthashsddv
-52. functions quicksortlight
+9. macro intslist
+10. macro ldsn
+11. macro ldsnm
+12. macro lvarnm
+13. macro lvarnmlab
+14. macro qdeduplistx
+15. macro qgetvars
+16. macro qzipevalf
+17. macro raincloudplot
+18. macro repeattxt
+19. macro splitdsintoblocks
+20. macro splitdsintoparts
+21. macro symdelglobal
+22. macro unziplibrary
+23. macro zipevalf
+24. macro ziplibrary
+25. format bool
+26. format boolz
+27. format ceil
+28. format floor
+29. format int
+30. functions arrfill
+31. functions arrfillc
+32. functions arrmissfill
+33. functions arrmissfillc
+34. functions arrmisstoleft
+35. functions arrmisstoleftc
+36. functions arrmisstoright
+37. functions arrmisstorightc
+38. functions bracketsc
+39. functions bracketsn
+40. functions catxfc
+41. functions catxfi
+42. functions catxfj
+43. functions catxfn
+44. functions deldataset
+45. functions semicolonc
+46. functions semicolonn
+47. format brackets
+48. format semicolon
+49. proto qsortincbyprocproto
+50. functions frommissingtonumberbs
+51. functions fromnumbertomissing
+52. functions quicksort4notmiss
+53. functions quicksorthash
+54. functions quicksorthashsddv
+55. functions quicksortlight
+
Package contains additional content, run: %loadPackageAddCnt(BasePlus) to load it
@@ -301,7 +308,7 @@ localization (only if additional content was deployed during the installation pr
* SAS package generated by generatePackage, version 20230411 *
The SHA256 hash digest for package BasePlus:
-`F*F39F38CE80A5D8EED3BC9F2413CD6DEF38E8657E5DCF427CBA8938EB8C4350B6`
+`F*625E56B017C4AA8D436959C0A03C8503773A9A3823D43FA9E0326276E52DA6F2`
---
# Content description ############################################################################################
@@ -4224,6 +4231,222 @@ run;
---
+## >>> `%intsList()` macro: <<< #######################
+
+The intsList() macro function allows to print a list of
+integers starting from `start` up to `end` incremented by `by`
+and separated by `sep=`.
+
+If `start`, `end` or `by` are non-integers the are converted to integers.
+
+See examples below for the details.
+
+The `%intsList()` macro executes like a pure macro code.
+
+### SYNTAX: ###################################################################
+
+The basic syntax is the following, the `<...>` means optional parameters:
+~~~~~~~~~~~~~~~~~~~~~~~sas
+%intsList(
+ start
+ <,end>
+ <,by>
+ <,sep=>
+)
+~~~~~~~~~~~~~~~~~~~~~~~
+
+**Arguments description**:
+
+1. `start` - *Required*, the first value of the list.
+ If `end` is missing then the list is generated
+ from 1 to `start` by 1.
+
+2. `end` - *Required/Optional*, the last value of the list.
+
+3. `by` - *Required/Optional*, the increment of the list.
+ If missing then set to `1`.
+ *Cannot* be equal to `0`.
+
+* `s = %str( )` - *Optional*, it is a separator between
+ elements of the list. Default value is space.
+
+---
+
+### EXAMPLES AND USECASES: ####################################################
+
+**EXAMPLE 1.** Simple list of integers from 1 to 10 by 1:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+ %put %intsList(10);
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+**EXAMPLE 2.** Ten copies of `sashelp.class` in `test11` to `test20`:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+ data
+ %zipEvalf(test, %intsList(11,20))
+ ;
+ set sashelp.class;
+ run;
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+**EXAMPLE 3.** Non-integers are converted to integers, the list is `1 3 5`:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+ %put %intsList(1.1,5.2,2.3);
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+**EXAMPLE 4.** A list with a separator:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+ %put %intsList(1,5,2,sep=+);
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+---
+
+## >>> `%splitDSIntoBlocks()` macro: <<< #######################
+
+The splitDSIntoBlocks() macro allows to split the `set` dataset into blocks
+of size `blockSize` in datasets: `prefix1` to `prefixN`.
+
+The last dataset may have less observations then the `blockSize`.
+
+Macro covers `BASE` engine (`v9`, `v8`, `v7`, `v6`) and `SPDE` engine datasets.
+
+See examples below for the details.
+
+### SYNTAX: ###################################################################
+
+The basic syntax is the following, the `<...>` means optional parameters:
+~~~~~~~~~~~~~~~~~~~~~~~sas
+%splitDSIntoBlocks(
+ blockSize
+ <,set>
+ <,prefix>
+)
+~~~~~~~~~~~~~~~~~~~~~~~
+
+**Arguments description**:
+
+1. `blockSize` - *Required*, the size of the block of data,
+ in other words number of observations in
+ one block of split data.
+ Block size must be positive integer.
+
+2. `set` - *Required/Optional*, the name of the dataset to split.
+ If empty then `&syslast.` is used.
+
+3. `prefix` - *Required/Optional*, the name-prefix for new datasets.
+ If missing then set to `part`.
+
+---
+
+### EXAMPLES AND USECASES: ####################################################
+
+**EXAMPLE 1.** Split `sashelp.class` into 5 elements datasets ABC1 to ABC4:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+ %splitDSIntoBlocks(5,sashelp.class,ABC)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+**EXAMPLE 2.** By default splits the `_last_` dataset into `part1` to `partN` datasets:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+ data lastData;
+ set sashelp.cars;
+ run;
+
+ %splitDSIntoBlocks(123)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+**EXAMPLE 3.** Works with `SPDE` engine too:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+ options dlcreatedir;
+ libname test "%sysfunc(pathname(work))/testSPDE";
+ libname test;
+ libname test SPDE "%sysfunc(pathname(work))/testSPDE";
+
+ data test.test;
+ set sashelp.cars;
+ run;
+
+ %splitDSIntoBlocks(100,test.test,work.spde)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+---
+
+## >>> `%splitDSIntoParts()` macro: <<< #######################
+
+The splitDSIntoParts() macro allows to split the `set` dataset into `parts` parts
+of approximately `NOBS/parts` size in datasets: `prefix1` to `prefixN`.
+
+The splitDSIntoParts() macro internally runs the splitDSIntoBlocks() macro.
+
+Macro covers `BASE` engine (`v9`, `v8`, `v7`, `v6`) and `SPDE` engine datasets.
+
+See examples below for the details.
+
+### SYNTAX: ###################################################################
+
+The basic syntax is the following, the `<...>` means optional parameters:
+~~~~~~~~~~~~~~~~~~~~~~~sas
+%splitDSIntoParts(
+ parts
+ <,set>
+ <,prefix>
+)
+~~~~~~~~~~~~~~~~~~~~~~~
+
+**Arguments description**:
+
+1. `parts` - *Required*, the number of parts to split data into.
+ Number of parts must be positive integer.
+
+2. `set` - *Required/Optional*, the name of the dataset to split.
+ If empty then `&syslast.` is used.
+
+3. `prefix` - *Required/Optional*, the name-prefix for new datasets.
+ If missing then set to `part`.
+
+---
+
+### EXAMPLES AND USECASES: ####################################################
+
+**EXAMPLE 1.** Split `sashelp.cars` into 7 parts: datasets carsInParts1 to carsInParts7:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+ %splitDSIntoParts(7,sashelp.cars, carsInParts)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+**EXAMPLE 2.** By default splits the `_last_` dataset into `part1` to `part3` datasets:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+ data lastData;
+ set sashelp.cars;
+ run;
+
+ %splitDSIntoBlocks(3)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+**EXAMPLE 3.** Works with `SPDE` engine too:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+ options dlcreatedir;
+ libname test "%sysfunc(pathname(work))/testSPDE";
+ libname test;
+ libname test SPDE "%sysfunc(pathname(work))/testSPDE";
+
+ data test.test;
+ set sashelp.cars;
+ run;
+
+ %splitDSIntoParts(3,test.test,work.spde)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+---
+
+---
+
+---
+
## License ####################################################################
Copyright (c) since 2020 Bartosz Jablonski
diff --git a/packages/baseplus.zip b/packages/baseplus.zip
index 4eec6fa..7e4a67a 100644
Binary files a/packages/baseplus.zip and b/packages/baseplus.zip differ