14 Commits

Author SHA1 Message Date
Bart Jablonski
29e37b4b79 Merge pull request #13 from SASPAC/dev
The BasePlus package [ver. 1.23.0]
2023-04-19 16:49:02 +02:00
Bart Jablonski
5d914da02d The BasePlus package [ver. 1.23.0]
The BasePlus package [ver. 1.23.0]

Three new utility macros for the BasePlus:
- `%intsList()` - prints a space separated list of integers,
- `%splitDSIntoBlocks()` - splits dataset into block of given size (and one[the last] possibly smaller)
- `%splitDSIntoParts()` - splits dataset into given number of parts (of approximately same size)

Macros `splitDSIntoBlocks` and `splitDSIntoParts` supports *BASE* and *SPDE* engines.

Documentation updated.
2023-04-19 16:39:09 +02:00
SASPAC - SAS Packages Archive
a2d9c6ce9f Merge pull request #12 from SASPAC/dev
The BasePlus package [ver. 1.20.0]
2023-04-17 15:00:11 +02:00
Bart Jablonski
4fb506753c The BasePlus package [ver. 1.20.0]
The BasePlus package [ver. 1.20.0]

- New utility macro `%repeatTxt()` added.
- Documentation updated.
2023-04-17 14:57:48 +02:00
SASPAC - SAS Packages Archive
ff0a008142 Merge pull request #11 from SASPAC/dev
The BasePlus package [ver. 1.19.1]
2023-04-11 18:44:17 +02:00
Bart Jablonski
505f501892 The BasePlus package [ver. 1.19.1]
The BasePlus package [ver. 1.19.1]

Package regenerated with the latest version of the SAS Packages Framework (20230411).
2023-04-11 18:38:20 +02:00
SASPAC - SAS Packages Archive
9e0afd454c Merge pull request #10 from SASPAC/dev
The BasePlus package [ver. 1.19.0]
2023-04-01 22:30:19 +02:00
Bart Jablonski
236d219a9d The BasePlus package [ver. 1.19.0]
The BasePlus package [ver. 1.19.0]

New macro:
The `%dirsAndFiles()` macro allows to extract info about all files and subdirectories of a given `root` directory. The macro is based on Kurt Bremser's "*Talking to Your Host*" article presented at WUSS 2022 conference.
2023-04-01 22:27:56 +02:00
SASPAC - SAS Packages Archive
b40baabfe9 Merge pull request #9 from SASPAC/main
pull request
2022-12-15 22:48:52 +01:00
Bart Jablonski
e930c2eac8 Update README.md 2022-12-15 22:47:11 +01:00
SASPAC - SAS Packages Archive
351fa4f5b1 Merge pull request #8 from SASPAC/dev
The BasePlus package [ver. 1.18.4]
2022-12-15 18:01:40 +01:00
Bartosz Jablonski
df09946ffc The BasePlus package [ver. 1.18.4]
The BasePlus package [ver. 1.18.4]

Package regenerated with the latest version of the SAS Packages Framework.
New macro `%bpPIPE()` added.
2022-12-15 17:56:58 +01:00
SASPAC - SAS Packages Archive
3285ff98cb Merge pull request #7 from SASPAC/dev
The BasePlus package [ver. 1.17.3]
2022-11-27 00:04:55 +01:00
Bartosz Jablonski
a932bd3c74 The BasePlus package [ver. 1.17.3]
The BasePlus package [ver. 1.17.3]

Package regenerated with the latest version of the SAS Packages Framework.
2022-11-27 00:01:11 +01:00
9 changed files with 583 additions and 56 deletions

View File

@@ -21,9 +21,23 @@ format x bool.;
%rainCloudPlot(sashelp.cars,DriveTrain,Invoice) %rainCloudPlot(sashelp.cars,DriveTrain,Invoice)
%zipLibrary(sashelp,libOut=work) %zipLibrary(sashelp,libOut=work)
%bpPIPE(ls -la ~/)
%dirsAndFiles(C:\SAS_WORK\,ODS=work.result)
%put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$);
%put %intsList(42);
%splitDSIntoBlocks(5, sashelp.class, classBlock)
%splitDSIntoParts(7, sashelp.cars, carsPart)
``` ```
and more. and more.
SHA256 digest for the latest version of `BasePlus`: EBA9EDB3D50D854288970CC0E965DA6AD5B057F6E6433EEBEC4A02B9A25CF6E2 SHA256 digest for the latest version of `BasePlus`: F*625E56B017C4AA8D436959C0A03C8503773A9A3823D43FA9E0326276E52DA6F2
[**Documentation for BasePlus**](./baseplus.md "Documentation for BasePlus") [**Documentation for BasePlus**](./baseplus.md "Documentation for BasePlus")
To work with a package use the [**SAS Packages Framework**](https://github.com/yabwon/SAS_PACKAGES/blob/main/README.md "SPFinit").

View File

@@ -49,14 +49,18 @@
* [`%LDsNm()` macro](#ldsnm-macro) * [`%LDsNm()` macro](#ldsnm-macro)
* [`%LVarNm()` macro](#lvarnm-macro) * [`%LVarNm()` macro](#lvarnm-macro)
* [`%LVarNmLab()` macro](#lvarnmlab-macro) * [`%LVarNmLab()` macro](#lvarnmlab-macro)
* [`%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) * [License](#license)
--- ---
# The BasePlus package [ver. 1.17.2] <a name="baseplus-package"></a> ############################################### # The BasePlus package [ver. 1.20.0] <a name="baseplus-package"></a> ###############################################
The **BasePlus** package implements useful The **BasePlus** package implements useful
functions and functionalities I miss in the BASE SAS. functions and functionalities I miss in the BASE SAS.
@@ -75,7 +79,8 @@ Kudos to all who inspired me to generate this package:
*Allan Bowe*, *Allan Bowe*,
*Anamaria Calai*, *Anamaria Calai*,
*Michal Ludwicki*, *Michal Ludwicki*,
*Quentin McMullen*. *Quentin McMullen*,
*Kurt Bremser*.
Recording from the SAS Explore 2022 conference: [A BasePlus Package for SAS](https://communities.sas.com/t5/SAS-Explore-Presentations/A-BasePlus-Package-for-SAS/ta-p/838246 "A BasePlus Package for SAS") (September 27th-29th, 2022). Recording from the SAS Explore 2022 conference: [A BasePlus Package for SAS](https://communities.sas.com/t5/SAS-Explore-Presentations/A-BasePlus-Package-for-SAS/ta-p/838246 "A BasePlus Package for SAS") (September 27th-29th, 2022).
@@ -220,63 +225,90 @@ data MyNextDataset;
run; run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**Example 12**: List, to the log, content of `home` directory.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%bpPIPE(ls -la ~/)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 13** Get list of all files and directories from `C:\SAS_WORK\`:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%dirsAndFiles(C:\SAS_WORK\,ODS=work.result)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 14** Text repetition:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--- ---
Package contains: Package contains:
1. macro deduplistc 1. macro bppipe
2. macro deduplistp 2. macro deduplistc
3. macro deduplists 3. macro deduplistp
4. macro deduplistx 4. macro deduplists
5. macro functionexists 5. macro deduplistx
6. macro getvars 6. macro dirsandfiles
7. macro ldsn 7. macro functionexists
8. macro ldsnm 8. macro getvars
9. macro lvarnm 9. macro intslist
10. macro lvarnmlab 10. macro ldsn
11. macro qdeduplistx 11. macro ldsnm
12. macro qgetvars 12. macro lvarnm
13. macro qzipevalf 13. macro lvarnmlab
14. macro raincloudplot 14. macro qdeduplistx
15. macro symdelglobal 15. macro qgetvars
16. macro unziplibrary 16. macro qzipevalf
17. macro zipevalf 17. macro raincloudplot
18. macro ziplibrary 18. macro repeattxt
19. format bool 19. macro splitdsintoblocks
20. format boolz 20. macro splitdsintoparts
21. format ceil 21. macro symdelglobal
22. format floor 22. macro unziplibrary
23. format int 23. macro zipevalf
24. functions arrfill 24. macro ziplibrary
25. functions arrfillc 25. format bool
26. functions arrmissfill 26. format boolz
27. functions arrmissfillc 27. format ceil
28. functions arrmisstoleft 28. format floor
29. functions arrmisstoleftc 29. format int
30. functions arrmisstoright 30. functions arrfill
31. functions arrmisstorightc 31. functions arrfillc
32. functions bracketsc 32. functions arrmissfill
33. functions bracketsn 33. functions arrmissfillc
34. functions catxfc 34. functions arrmisstoleft
35. functions catxfi 35. functions arrmisstoleftc
36. functions catxfj 36. functions arrmisstoright
37. functions catxfn 37. functions arrmisstorightc
38. functions deldataset 38. functions bracketsc
39. functions semicolonc 39. functions bracketsn
40. functions semicolonn 40. functions catxfc
41. format brackets 41. functions catxfi
42. format semicolon 42. functions catxfj
43. proto qsortincbyprocproto 43. functions catxfn
44. functions frommissingtonumberbs 44. functions deldataset
45. functions fromnumbertomissing 45. functions semicolonc
46. functions quicksort4notmiss 46. functions semicolonn
47. functions quicksorthash 47. format brackets
48. functions quicksorthashsddv 48. format semicolon
49. functions quicksortlight 49. proto qsortincbyprocproto
50. functions frommissingtonumberbs
51. functions fromnumbertomissing
52. functions quicksort4notmiss
53. functions quicksorthash
54. functions quicksorthashsddv
55. functions quicksortlight
*SAS package generated by generatePackage, version 20221121*
Package contains additional content, run: %loadPackageAddCnt(BasePlus) to load it
or look for the baseplus_AdditionalContent directory in the Packages fileref
localization (only if additional content was deployed during the installation process).
* SAS package generated by generatePackage, version 20230411 *
The SHA256 hash digest for package BasePlus: The SHA256 hash digest for package BasePlus:
`EBA9EDB3D50D854288970CC0E965DA6AD5B057F6E6433EEBEC4A02B9A25CF6E2` `F*625E56B017C4AA8D436959C0A03C8503773A9A3823D43FA9E0326276E52DA6F2`
--- ---
# Content description ############################################################################################ # Content description ############################################################################################
@@ -3934,6 +3966,487 @@ The basic syntax is the following, the `<...>` means optional parameters:
--- ---
## >>> `%bpPIPE()` macro: <<< <a name="bppipe-macro"></a> #######################
The bpPIPE() [Base Plus PIPE] macro executes OS command
and print to the log output of the execution.
Under the hood it uses `_` filename reference to PIPE device.
### SYNTAX: ###################################################################
The basic syntax is the following, the `<...>` means optional parameters:
~~~~~~~~~~~~~~~~~~~~~~~sas
%bpPIPE( <OS command goes here> )
~~~~~~~~~~~~~~~~~~~~~~~
**Arguments description**:
* **NO Arguments** - Everything inside brackets is treated as an OS command.
---
### EXAMPLES AND USECASES: ####################################################
**EXAMPLE 1.** List, to the log, content of D and C drives:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%bpPIPE(D: & dir & dir "C:\")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 2.** List, to the log, content of `home` directory:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%bpPIPE(ls -halt ~/)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
## >>> `%dirsAndFiles()` macro: <<< <a name="dirsandfiles-macro"></a> #######################
The `%dirsAndFiles()` macro allows to extract info about all files
and subdirectories of a given `root` directory.
The extracted info may be just a list of files and subdirectories or, if
the `details=` parameter is set to 1, additional operating system information
is extracted (information is OSS dependent and gives different results for Linux
and for Windows)
The extracted info can be narrowed down to files (`keepFiles=1`) or to
directories (`keepDirs=1`) if need be.
The extracted info can be presented in wide or long format (`longFormat=1`).
The extracted info for files can be narrowed down to only files with particular
extension, for example: `fileExt=sas7bdat`.
The extracted info can be narrowed down maximal path depth
by setting up the `maxDepth=` parameter.
See examples below for the details.
### REFERENCES: ###################################################################
The macro is based on Kurt Bremser's "*Talking to Your Host*" article
presented at WUSS 2022 conference.
The article is available [here](https://communities.sas.com/t5/SAS-User-Groups-Library/WUSS-Presentation-Talking-to-Your-Host/ta-p/838344)
and also as an additional content of this package.
The paper was awarded the "Best Paper Award - Programming".
### SYNTAX: ###################################################################
The basic syntax is the following, the `<...>` means optional parameters:
~~~~~~~~~~~~~~~~~~~~~~~sas
%dirsAndFiles(
root
<,ODS=>
<,details=>
<,keepDirs=>
<,keepFiles=>
<,longFormat=>
<,fileExt=>
<,maxDepth=>
)
~~~~~~~~~~~~~~~~~~~~~~~
**Arguments description**:
1. `root` - *Required*, path to be searched
for information.
* `ODS=work.dirsAndFilesInfo` - *Optional*, output data set,
name of a dataset to store information.
* `details=0` - *Optional*, indicates if detailed info
will be collected, `1` = yes, `0` = no.
* `keepDirs=1` - *Optional*, indicates if directories info
will be collected, `1` = yes, `0` = no.
* `keepFiles=1` - *Optional*, indicates if files info
will be collected, `1` = yes, `0` = no.
* `longFormat=0` - *Optional*, indicates if output be
in long format, `1` = yes, `0` = no.
* `fileExt=` - *Optional*, if not missing then indicates
file extension to filter out results.
* `maxDepth=0` - *Optional*, if not zero then indicates
maximum depth of search in the root path.
---
### EXAMPLES AND USECASES: ####################################################
**EXAMPLE 1.** Get list of files and directories:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%dirsAndFiles(C:\SAS_WORK\,ODS=work.result1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 2.** Get detailed info:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%dirsAndFiles(C:\SAS_WORK\,ODS=work.result2,details=1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 3.** Get only files info:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%dirsAndFiles(C:\SAS_WORK\,ODS=work.result3,keepDirs=0)
%dirsAndFiles(C:\SAS_WORK\,ODS=work.result5,keepDirs=0,details=1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 4.** Get only directories info:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%dirsAndFiles(C:\SAS_WORK\,ODS=work.result4,keepFiles=0)
%dirsAndFiles(C:\SAS_WORK\,ODS=work.result6,keepFiles=0,details=1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 5.** Filter out by `sas` extension:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%dirsAndFiles(~/,ODS=work.result7,fileExt=sas)
%dirsAndFiles(~/,ODS=work.result8,fileExt=sas,details=1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 6.** Keep result in the long format:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%dirsAndFiles(~/,ODS=work.result9,details=1,longFormat=1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 7.** Get info for maximum depth of 2:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%dirsAndFiles(C:\SAS_WORK\,ODS=work.result10,details=1,maxDepth=2)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 8.** How locked/unavailable files are handled:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%dirsAndFiles(%sysfunc(pathname(WORK)),ODS=work.result11,details=1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 9.** Not existing directory:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%dirsAndFiles(%sysfunc(pathname(WORK))/noSuchDir,ODS=work.result12,details=1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
## >>> `%repeatTxt()` macro: <<< <a name="repeattxt-macro"></a> #######################
The repeatTxt() macro function allows to repeat `n`
times a `text` string separated by string `s=`.
The repeatTxt() returns unquoted value [by %unquote()].
See examples below for the details.
The `%repeatTxt()` macro executes like a pure macro code.
### SYNTAX: ###################################################################
The basic syntax is the following, the `<...>` means optional parameters:
~~~~~~~~~~~~~~~~~~~~~~~sas
%repeatTxt(
text
<,n>
<,s=>
)
~~~~~~~~~~~~~~~~~~~~~~~
**Arguments description**:
1. `text` - *Required*, a text to be repeated.
2. `n` - *Required/Optional*, the number of repetitions.
If missing then set to `1`;
* `s = %str( )` - *Optional*, it is a separator between
repeated elements. Default value is space.
---
### EXAMPLES AND USECASES: ####################################################
**EXAMPLE 1.** Simple repetition of dataset name:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
options mprint;
data work.test5;
set
%repeatTxt(sashelp.cars, 5)
;
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 2.** Simple repetition of data step:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
options mprint;
%repeatTxt(data _null_; set sashelp.cars; run;, 3)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 3.** "Nice" output:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 4.** Macroquote a text with commas:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%repeatTxt(
%str(proc sql; create table wh as select weight,height from sashelp.class; quit;)
,3
)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 5.** Empty `n` repeats `text` one time:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
options mprint;
data work.test1;
set
%repeatTxt(sashelp.cars)
;
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 6.** Dynamic "formatting":
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%macro printWork();
%let work=%sysfunc(pathname(work));
%put +%repeatTxt(~,%length(&work.)+5,s=)+;
%put {&=work.};
%put +%repeatTxt(~,%length(&work.)+5,s=)+;
%mend printWork;
%printWork()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
## >>> `%intsList()` macro: <<< <a name="intslist-macro"></a> #######################
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: <<< <a name="splitdsintoblocks-macro"></a> #######################
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: <<< <a name="splitdsintoparts-macro"></a> #######################
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 #################################################################### ## License ####################################################################
Copyright (c) since 2020 Bartosz Jablonski Copyright (c) since 2020 Bartosz Jablonski

Binary file not shown.

BIN
hist/1.17.3/baseplus.zip Normal file

Binary file not shown.

BIN
hist/1.18.4/baseplus.zip Normal file

Binary file not shown.

BIN
hist/1.19.0/baseplus.zip Normal file

Binary file not shown.

BIN
hist/1.19.1/baseplus.zip Normal file

Binary file not shown.

BIN
hist/1.20.0/baseplus.zip Normal file

Binary file not shown.

BIN
hist/1.23.0/baseplus.zip Normal file

Binary file not shown.