16 Commits

Author SHA1 Message Date
SASPAC - SAS Packages Archive
4b19a7438c Merge pull request #41 from SASPAC/dev
The BasePlus package [ver. 1.43.0]
2024-07-22 09:08:06 +02:00
Bart Jablonski
e2c4cc66b7 The BasePlus package [ver. 1.43.0]
## The BasePlus package [ver. 1.43.0]

### Changes:

Update to [`%getVars()`](https://github.com/SASPAC/baseplus/blob/1.41.0/baseplus.md#getvars-macro-8) and [`%qgetVars()`](https://github.com/SASPAC/baseplus/blob/1.41.0/baseplus.md#qgetvars-macro-15) macros.

New parameter `ignoreCases=` added. It is an *optional* parameter.
It indicates if variables names search should be case insensitive.
With default value `1`, the search *is* case insensitive.

See [documentation](https://github.com/SASPAC/baseplus/blob/main/baseplus.md) for details.

---

SHA256 digest for BasePlus: `F*68BB953CD732EB43119A3339656670292317FE1C3B764EC57484C7D5C9DF23EB`

---
2024-07-22 09:05:24 +02:00
SASPAC - SAS Packages Archive
817fa27b6b Merge pull request #40 from SASPAC/dev
The BasePlus package [ver. 1.42.1]
2024-07-19 10:33:21 +02:00
Bart Jablonski
bc7b2b5ee8 The BasePlus package [ver. 1.42.1]
## The BasePlus package [ver. 1.42.1]

### Changes:

Update to the
[`%rainCloudPlot()`](https://github.com/SASPAC/baseplus/blob/1.42.1/baseplus.md#raincloudplot-macro-17)
macro, input parameters checks added.

See [documentation](https://github.com/SASPAC/baseplus/blob/main/baseplus.md) for details.

---

SHA256 digest for BasePlus: `F*2129F372D72A34A4FB1F368A581EA33D64AD4D8F3707213D5B9553F3C3122003`

---
2024-07-19 10:29:38 +02:00
SASPAC - SAS Packages Archive
94ec410027 Merge pull request #39 from SASPAC/dev
The BasePlus package [ver. 1.42.0]
2024-07-10 23:10:40 +02:00
Bart Jablonski
95a0f71940 The BasePlus package [ver. 1.42.0]
## The BasePlus package [ver. 1.42.0]

### Changes:

New macro
[`%GenerateOneLiners()`](https://github.com/SASPAC/baseplus/blob/1.42.0/baseplus.md#generateoneliners-macro)
allowing to generate "one liner" functions of the form:

~~~~sas
%macro FUNCTION()/parmbuff;
%sysfunc(FUNCTION&syspbuff)
%mend FUNCTION;
~~~~

See [documentation](https://github.com/SASPAC/baseplus/blob/main/baseplus.md) for details.

---

SHA256 digest for BasePlus: `F*6012D1475AE22A4445C032D8EAE092BE515D8CD2AE390CC087F5987ACB8BCB13`

---

### Example

~~~~sas
%GenerateOneLiners(
  listOfFunctions=SUM MEAN MEDIAN VAR
, prefix=_)

%put
  %_SUM(1,2,3,4,5,6)
  %_MEAN(1,2,3,4,5,6)
  %_MEDIAN(1,2,3,4,5,6)
  %_VAR(1,2,3,4,5,6)
;
~~~~
2024-07-10 23:07:23 +02:00
SASPAC - SAS Packages Archive
3cecb0a5c0 Merge pull request #38 from SASPAC/dev
The BasePlus package [ver. 1.41.0]
2024-06-09 18:54:18 +02:00
Bart Jablonski
d52e0cf147 The BasePlus package [ver. 1.41.0]
## The BasePlus package [ver. 1.41.0]

### Changes:

Update to the
[`%rainCloudPlot()`](https://github.com/SASPAC/baseplus/blob/1.41.0/baseplus.md#raincloudplot-macro-17)
macro, new parameter:
 - `meanShiftLine=`
 - `meanShiftStep=`
 - `meanShiftColors=`
 - `xaxisValues=`
 - `xaxisValuesDisplay=`
 - `xaxisValuesFormat=`
 - `xaxisValuesRotate=`
 - `xaxisOther=`
 - `reuseN=`

See [documentation](https://github.com/SASPAC/baseplus/blob/main/baseplus.md) for details.

---

SHA256 digest for BasePlus: `F*6760DDF382E7CA9A1291F028FA7F2BACB68A3D31CEA3A85104E13EA08645AEF1`

---
2024-06-09 18:51:00 +02:00
SASPAC - SAS Packages Archive
ab783382a8 Merge pull request #37 from SASPAC/dev
The BasePlus package [ver. 1.40.0]
2024-06-06 22:20:35 +02:00
Bart Jablonski
2e561a79ae The BasePlus package [ver. 1.40.0]
## The BasePlus package [ver. 1.40.0]

### Changes:

Update to the
[`%rainCloudPlot()`](https://github.com/SASPAC/baseplus/blob/1.40.0/baseplus.md#raincloudplot-macro-17)
macro, new parameter:
- `boxPlotLineSize=`
- `boxPlotFill=`
- `xBothAxis=`
- `minRange=`
- `maxRange=`

See [documentation](https://github.com/SASPAC/baseplus/blob/main/baseplus.md) for details.

---

SHA256 digest for BasePlus: `F*BD0333B92D7CB639A136CD4994DE0C63F8396E449E45BC714D71D2E15318F42D`

---
2024-06-06 22:16:31 +02:00
SASPAC - SAS Packages Archive
c88e524d3d Merge pull request #36 from SASPAC/dev
The BasePlus package [ver. 1.39.0]
2024-05-29 16:44:04 +02:00
Bart Jablonski
f9fa786ab3 The BasePlus package [ver. 1.39.0]
The BasePlus package [ver. 1.39.0]

Changes:
- new parameter `DSout=` added in `%downloadFilesTo()` macro,

---

File SHA256: `F*3C3A2050E3FF46E1FC0F936634A66FC3F294A3531EFE0A7DC9CE74F2EF17C687` for this version.
2024-05-29 16:36:44 +02:00
SASPAC - SAS Packages Archive
3aaf69ebab Merge pull request #35 from SASPAC/dev
The BasePlus package [ver. 1.38.0]
2024-03-12 14:46:39 +01:00
SASPAC - SAS Packages Archive
1d474a79e4 Merge branch 'main' into dev 2024-03-12 14:46:26 +01:00
Bart Jablonski
9b9d9dea38 The BasePlus package [ver. 1.38.0]
The BasePlus package [ver. 1.38.0]

Update to the `%rainCloudPlot()` macro, new parameter for "vertical" plots added.

Documentation updated and "cleaned".

---

SHA256 digest for BasePlus: `F*209FB8198270DEAB6151CE31391A352A065B4EE2689F40433FA9550A7F4AAC18`

---
2024-03-12 14:42:32 +01:00
Bart Jablonski
21316add63 The BasePlus package [ver. 1.37.0]
## The BasePlus package [ver. 1.37.0]

Changes:

- Update to the %rainCloudPlot() macro.
- New macro %iffunc() added.
- Documentation updated.

---

SHA256 digest for BasePlus: F*8155BFE82F7833E4B0DA24D81DBDFC58463906D6032B1F0161772DADE84BE790

---
2024-03-10 08:27:52 +01:00
67 changed files with 50369 additions and 111 deletions

View File

@@ -54,7 +54,7 @@ libname NEW "%workPath()/new";
``` ```
and more. and more.
SHA256 digest for the latest version of `BasePlus`: F*8155BFE82F7833E4B0DA24D81DBDFC58463906D6032B1F0161772DADE84BE790 SHA256 digest for the latest version of `BasePlus`: F*68BB953CD732EB43119A3339656670292317FE1C3B764EC57484C7D5C9DF23EB
[**Documentation for BasePlus**](./baseplus.md "Documentation for BasePlus") [**Documentation for BasePlus**](./baseplus.md "Documentation for BasePlus")

View File

@@ -1,28 +1,30 @@
# Documentation for the `BasePlus` package. # Documentation for the `BasePlus` package.
--- ----------------------------------------------------------------
### Version information:
*The BASE SAS plus a bunch of functionalities I am missing in BASE SAS* *The BASE SAS plus a bunch of functionalities I am missing in BASE SAS*
----------------------------------------------------------------
### Version information:
- Package: BasePlus - Package: BasePlus
- Version: 1.37.0 - Version: 1.43.0
- Generated: 2024-03-09T13:28:58 - Generated: 2024-07-22T08:50:35
- Author(s): Bartosz Jablonski (yabwon@gmail.com), Quentin McMullen (qmcmullen@gmail.com) - Author(s): Bartosz Jablonski (yabwon@gmail.com), Quentin McMullen (qmcmullen@gmail.com)
- Maintainer(s): Bartosz Jablonski (yabwon@gmail.com) - Maintainer(s): Bartosz Jablonski (yabwon@gmail.com)
- License: MIT - License: MIT
- File SHA256: `F*8155BFE82F7833E4B0DA24D81DBDFC58463906D6032B1F0161772DADE84BE790` for this version - File SHA256: `F*68BB953CD732EB43119A3339656670292317FE1C3B764EC57484C7D5C9DF23EB` for this version
- Content SHA256: `C*7A4A85EB6C2C23E6A171DDCD8F61D7ED40E9A6751F9579DF893E148A95FFE188` for this version - Content SHA256: `C*7436BD6446CDA2F57163B7BA45482750D460CA9AEFDCA4012253D742B8EE5E65` for this version
--- ---
# The `BasePlus` package, version: `1.37.0`; # The `BasePlus` package, version: `1.43.0`;
--- ---
# The BasePlus package [ver. 1.37.0] <a name="baseplus-package"></a> ############################################### # The BasePlus package [ver. 1.43.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.
@@ -349,7 +351,7 @@ run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 26** Downloading data from the internet to a local dirrectory: **EXAMPLE 26** Downloading data from the internet to a local directory:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%downloadFilesTo(~/directoryA) %downloadFilesTo(~/directoryA)
datalines4; datalines4;
@@ -362,7 +364,7 @@ run;
**EXAMPLE 27** Conditional value assignment: **EXAMPLE 27** Conditional value assignment:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%let x = A B C; %let x = A B C;
%let y = %iffunc((%scan(&x.,1)=A),Stats with "A"., Does not start with "A".); %let y = %iffunc((%scan(&x.,1)=A),Starts with "A"., Does not start with "A".);
%put &=y.; %put &=y.;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -382,12 +384,13 @@ localization (only if additional content was deployed during the installation pr
-------------------------------------------------------------------- --------------------------------------------------------------------
*SAS package generated by SAS Package Framework, version `20231210`* *SAS package generated by SAS Package Framework, version `20240711`*
-------------------------------------------------------------------- --------------------------------------------------------------------
# The `BasePlus` package content # The `BasePlus` package content
The `BasePlus` package consists of the following content: The `BasePlus` package consists of the following content:
1. [`%bppipe()` macro ](#bppipe-macro-1 ) 1. [`%bppipe()` macro ](#bppipe-macro-1 )
2. [`%deduplistc()` macro ](#deduplistc-macro-2 ) 2. [`%deduplistc()` macro ](#deduplistc-macro-2 )
3. [`%deduplistp()` macro ](#deduplistp-macro-3 ) 3. [`%deduplistp()` macro ](#deduplistp-macro-3 )
@@ -451,22 +454,23 @@ The `BasePlus` package consists of the following content:
61. [`%filepath()` macro ](#filepath-macro-61 ) 61. [`%filepath()` macro ](#filepath-macro-61 )
62. [`%finddswithvarval()` macro ](#finddswithvarval-macro-62 ) 62. [`%finddswithvarval()` macro ](#finddswithvarval-macro-62 )
63. [`%fmt()` macro ](#fmt-macro-63 ) 63. [`%fmt()` macro ](#fmt-macro-63 )
64. [`%gettitle()` macro ](#gettitle-macro-64 ) 64. [`%generateoneliners()` macro ](#generateoneliners-macro-64 )
65. [`%iffunc()` macro ](#iffunc-macro-65 ) 65. [`%gettitle()` macro ](#gettitle-macro-65 )
66. [`%infmt()` macro ](#infmt-macro-66 ) 66. [`%iffunc()` macro ](#iffunc-macro-66 )
67. [`%letters()` macro ](#letters-macro-67 ) 67. [`%infmt()` macro ](#infmt-macro-67 )
68. [`%libpath()` macro ](#libpath-macro-68 ) 68. [`%letters()` macro ](#letters-macro-68 )
69. [`%minclude()` macro ](#minclude-macro-69 ) 69. [`%libpath()` macro ](#libpath-macro-69 )
70. [`%monthshift()` macro ](#monthshift-macro-70 ) 70. [`%minclude()` macro ](#minclude-macro-70 )
71. [`%replist()` macro ](#replist-macro-71 ) 71. [`%monthshift()` macro ](#monthshift-macro-71 )
72. [`%time()` macro ](#time-macro-72 ) 72. [`%replist()` macro ](#replist-macro-72 )
73. [`%today()` macro ](#today-macro-73 ) 73. [`%time()` macro ](#time-macro-73 )
74. [`%translate()` macro ](#translate-macro-74 ) 74. [`%today()` macro ](#today-macro-74 )
75. [`%tranwrd()` macro ](#tranwrd-macro-75 ) 75. [`%translate()` macro ](#translate-macro-75 )
76. [`%workpath()` macro ](#workpath-macro-76 ) 76. [`%tranwrd()` macro ](#tranwrd-macro-76 )
77. [`%workpath()` macro ](#workpath-macro-77 )
95. [License note](#license) 78. [License note](#license)
--- ---
@@ -516,7 +520,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
## >>> `%dedupListC()` macro: <<< <a name="deduplistc-macro"></a> ####################### ## >>> `%dedupListC()` macro: <<< <a name="deduplistc-macro"></a> #######################
The `%dedupListC()` macro deletes duplicated values from The `%dedupListC()` macro deletes duplicated values from
a *COMMA separated* list of values. List, including separators, a *COMMA-separated* list of values. List, including separators,
can be no longer than a value carried by a single macro variable. can be no longer than a value carried by a single macro variable.
Returned value is *unquoted*. Leading and trailing spaces are ignored. Returned value is *unquoted*. Leading and trailing spaces are ignored.
@@ -534,7 +538,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
**Arguments description**: **Arguments description**:
1. `list` - A list of *comma separated* values. 1. `list` - A list of *comma-separated* values.
### EXAMPLES AND USECASES: #################################################### ### EXAMPLES AND USECASES: ####################################################
@@ -577,7 +581,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
## >>> `%dedupListP()` macro: <<< <a name="deduplistp-macro"></a> ####################### ## >>> `%dedupListP()` macro: <<< <a name="deduplistp-macro"></a> #######################
The `%dedupListP()` macro deletes duplicated values from The `%dedupListP()` macro deletes duplicated values from
a *PIPE(`|`) separated* list of values. List, including separators, a *PIPE(`|`)-separated* list of values. List, including separators,
can be no longer than a value carried by a single macro variable. can be no longer than a value carried by a single macro variable.
Returned value is *unquoted*. Leading and trailing spaces are ignored. Returned value is *unquoted*. Leading and trailing spaces are ignored.
@@ -595,7 +599,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
**Arguments description**: **Arguments description**:
1. `list` - A list of *pipe separated* values. 1. `list` - A list of *pipe-separated* values.
### EXAMPLES AND USECASES: #################################################### ### EXAMPLES AND USECASES: ####################################################
@@ -638,7 +642,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
## >>> `%dedupListS()` macro: <<< <a name="deduplists-macro"></a> ####################### ## >>> `%dedupListS()` macro: <<< <a name="deduplists-macro"></a> #######################
The `%dedupListS()` macro deletes duplicated values from The `%dedupListS()` macro deletes duplicated values from
a *SPACE separated* list of values. List, including separators, a *SPACE-separated* list of values. List, including separators,
can be no longer than a value carried by a single macro variable. can be no longer than a value carried by a single macro variable.
Returned value is *unquoted*. Returned value is *unquoted*.
@@ -650,13 +654,13 @@ The `%dedupListS()` macro executes like a pure macro code.
The basic syntax is the following, the `<...>` means optional parameters: The basic syntax is the following, the `<...>` means optional parameters:
~~~~~~~~~~~~~~~~~~~~~~~sas ~~~~~~~~~~~~~~~~~~~~~~~sas
%dedupListS( %dedupListS(
list of space separated values list of space-separated values
) )
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
**Arguments description**: **Arguments description**:
1. `list` - A list of *space separated* values. 1. `list` - A list of *space-separated* values.
### EXAMPLES AND USECASES: #################################################### ### EXAMPLES AND USECASES: ####################################################
@@ -692,7 +696,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
## >>> `%dedupListX()` macro: <<< <a name="deduplistx-macro"></a> ####################### ## >>> `%dedupListX()` macro: <<< <a name="deduplistx-macro"></a> #######################
The `%dedupListX()` macro deletes duplicated values from The `%dedupListX()` macro deletes duplicated values from
a *X separated* list of values, where the `X` represents a *X-separated* list of values, where the `X` represents
a *single character* separator. List, including separators, a *single character* separator. List, including separators,
can be no longer than a value carried by a single macro variable. can be no longer than a value carried by a single macro variable.
@@ -714,7 +718,7 @@ XlistXofXxXseparatedXvalues
**Arguments description**: **Arguments description**:
1. `list` - A list of *X separated* values. 1. `list` - A list of *X-separated* values.
### EXAMPLES AND USECASES: #################################################### ### EXAMPLES AND USECASES: ####################################################
@@ -773,7 +777,7 @@ and subdirectories of a given `root` directory.
The extracted info may be just a list of files and subdirectories or, if 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 the `details=` parameter is set to 1, additional operating system information
is extracted (information is OSS dependent and gives different results for Linux is extracted (information is OS-dependent and gives different results for Linux
and for Windows) and for Windows)
The extracted info can be narrowed down to files (`keepFiles=1`) or to The extracted info can be narrowed down to files (`keepFiles=1`) or to
@@ -835,7 +839,8 @@ The basic syntax is the following, the `<...>` means optional parameters:
in long format, `1` = yes, `0` = no. in long format, `1` = yes, `0` = no.
* `fileExt=` - *Optional*, if not missing then indicates * `fileExt=` - *Optional*, if not missing then indicates
file extension to filter out results. a list of space-separated file extensions
to filter out results.
* `maxDepth=0` - *Optional*, if not zero then indicates * `maxDepth=0` - *Optional*, if not zero then indicates
maximum depth of search in the root path. maximum depth of search in the root path.
@@ -974,6 +979,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
<,varRange=> <,varRange=>
<,quote=> <,quote=>
<,mcArray=> <,mcArray=>
<,ignoreCases>
) )
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
@@ -986,7 +992,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
a variables separator on the created list. a variables separator on the created list.
* `pattern = .*` - *Optional*, default value `.*` (i.e. any text), * `pattern = .*` - *Optional*, default value `.*` (i.e. any text),
a variable name regexp pattern, case INSENSITIVE! a variable name regexp pattern, by default case INSENSITIVE!
* `varRange = _all_` - *Optional*, default value `_all_`, * `varRange = _all_` - *Optional*, default value `_all_`,
a named range list of variables. a named range list of variables.
@@ -1007,6 +1013,8 @@ The basic syntax is the following, the `<...>` means optional parameters:
`%put %getVars(..., mcArray=XXX);` will result with `%put %getVars(..., mcArray=XXX);` will result with
an Explicit & Radical Refuse Of Run (aka ERROR). an Explicit & Radical Refuse Of Run (aka ERROR).
* `ignoreCases=` - *Optional*, default value is 1.
Indicates if search should be case insensitive.
### EXAMPLES AND USECASES: #################################################### ### EXAMPLES AND USECASES: ####################################################
@@ -1093,12 +1101,12 @@ The basic syntax is the following, the `<...>` means optional parameters:
%put *%str(%')%bquote(%getVars(sashelp.class,sep=''))%str(%')*; %put *%str(%')%bquote(%getVars(sashelp.class,sep=''))%str(%')*;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c) coma separated double quote list: c) comma-separated double quote list:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%put *"%getVars(sashelp.class,sep=%str(", "))"*; %put *"%getVars(sashelp.class,sep=%str(", "))"*;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
d) coma separated single quote list: d) comma-separated single quote list:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%put *%str(%')%getVars(sashelp.class,sep=', ')%str(%')*; %put *%str(%')%getVars(sashelp.class,sep=', ')%str(%')*;
%let x = %str(%')%getVars(sashelp.class,sep=', ')%str(%'); %let x = %str(%')%getVars(sashelp.class,sep=', ')%str(%');
@@ -1163,12 +1171,12 @@ a) one single or double qiote:
%put *%QgetVars(sashelp.class,quote='')*; %put *%QgetVars(sashelp.class,quote='')*;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c) coma separated double quote list: c) comma-separated double quote list:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%put *%getVars(sashelp.class,sep=%str(,),quote=%str(%"))*; %put *%getVars(sashelp.class,sep=%str(,),quote=%str(%"))*;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
d) coma separated single quote list: d) comma-separated single quote list:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%let x = %getVars(sashelp.class,sep=%str(,),quote=%str(%')); %let x = %getVars(sashelp.class,sep=%str(,),quote=%str(%'));
%put &=x.; %put &=x.;
@@ -1546,8 +1554,8 @@ The basic syntax is the following, the `<...>` means optional parameters:
) )
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
The text string is concider as *"only dataset name"*, i.e. macro does not The text string is consider as *"only dataset name"*, i.e. macro does not
assume it contain library as prefix or data set options as sufix. assume it contain library as prefix or data set options as suffix.
See the `%LDSN()` macro for comparison. See the `%LDSN()` macro for comparison.
--- ---
@@ -1778,7 +1786,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
## >>> `%QdedupListX()` macro: <<< <a name="qdeduplistx-macro"></a> ####################### ## >>> `%QdedupListX()` macro: <<< <a name="qdeduplistx-macro"></a> #######################
The `%QdedupListX()` macro deletes duplicated values from The `%QdedupListX()` macro deletes duplicated values from
a *X separated* list of values, where the `X` represents a *X-separated* list of values, where the `X` represents
a *single character* separator. List, including separators, a *single character* separator. List, including separators,
can be no longer than a value carried by a single macro variable. can be no longer than a value carried by a single macro variable.
@@ -1800,7 +1808,7 @@ XlistXofXxXseparatedXvalues
**Arguments description**: **Arguments description**:
1. `list` - A list of *X separated* values. 1. `list` - A list of *X-separated* values.
### EXAMPLES AND USECASES: #################################################### ### EXAMPLES AND USECASES: ####################################################
@@ -1874,6 +1882,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
<,pattern=> <,pattern=>
<,varRange=> <,varRange=>
<,quote=> <,quote=>
<,ignoreCases=>
) )
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
@@ -1894,6 +1903,9 @@ The basic syntax is the following, the `<...>` means optional parameters:
* `quote =` - *Optional*, default value is blank, a quotation * `quote =` - *Optional*, default value is blank, a quotation
symbol to be used around values. symbol to be used around values.
* `ignoreCases=` - *Optional*, default value is 1.
Indicates if search should be case insensitive.
### EXAMPLES AND USECASES: #################################################### ### EXAMPLES AND USECASES: ####################################################
@@ -1910,9 +1922,9 @@ See examples in `%getVars()` help for the details.
The zipEvalf() and QzipEvalf() macro functions The zipEvalf() and QzipEvalf() macro functions
allow to use a function on elements of pair of allow to use a function on elements of pair of
space separated lists. space-separated lists.
For two space separated lists of text strings the corresponding For two space-separated lists of text strings the corresponding
elements are taken and the macro applies a function, provided by user, elements are taken and the macro applies a function, provided by user,
to calculate result of the function on taken elements. to calculate result of the function on taken elements.
@@ -1944,9 +1956,9 @@ The basic syntax is the following, the `<...>` means optional parameters:
**Arguments description**: **Arguments description**:
1. `first` - *Required*, a space separated list of texts. 1. `first` - *Required*, a space-separated list of texts.
2. `second` - *Required*, a space separated list of texts. 2. `second` - *Required*, a space-separated list of texts.
* `function = cat` - *Optional*, default value is `cat`, * `function = cat` - *Optional*, default value is `cat`,
a function which will be applied a function which will be applied
@@ -1963,18 +1975,18 @@ The basic syntax is the following, the `<...>` means optional parameters:
* `argBf =` - *Optional*, default value is empty, * `argBf =` - *Optional*, default value is empty,
arguments of the function inserted arguments of the function inserted
*before* elements the first list. *before* elements the first list.
If multiple should be comma separated. If multiple should be comma-separated.
* `argMd =` - *Optional*, default value is empty, * `argMd =` - *Optional*, default value is empty,
arguments of the function inserted arguments of the function inserted
*between* elements the first list and *between* elements the first list and
the second list. the second list.
If multiple should be comma separated. If multiple should be comma-separated.
* `argAf =` - *Optional*, default value is empty, * `argAf =` - *Optional*, default value is empty,
arguments of the function inserted arguments of the function inserted
*after* elements the second list. *after* elements the second list.
If multiple should be comma separated. If multiple should be comma-separated.
* `format=` - *Optional*, default value is empty, * `format=` - *Optional*, default value is empty,
indicates a format which should be used indicates a format which should be used
@@ -1995,8 +2007,8 @@ See examples in `%zipEvalf()` help for the details.
## >>> `%RainCloudPlot()` macro: <<< <a name="raincloudplot-macro"></a> ####################### ## >>> `%RainCloudPlot()` macro: <<< <a name="raincloudplot-macro"></a> #######################
The RainCloudPlot() macro allow to plot Rain Cloud plots, i.e. pots of The RainCloudPlot() macro allow to plot Rain Cloud plots, i.e.
kernel density estimates, jitter data values, and box-and-whiskers plot. plots of kernel density estimates, jitter data values, and box-and-whiskers plot.
See examples below for the details. See examples below for the details.
@@ -2015,6 +2027,11 @@ The basic syntax is the following, the `<...>` means optional parameters:
<,roundFactor=> <,roundFactor=>
<,rainDropSize=> <,rainDropSize=>
<,boxPlotSymbolSize=> <,boxPlotSymbolSize=>
<,boxPlotLineSize=>
<,boxPlotFill=>
<,meanShiftLine=>
<,meanShiftStep=>
<,meanShiftColors=>
<,colorsList=> <,colorsList=>
<,monochrome=> <,monochrome=>
<,antialiasMax=> <,antialiasMax=>
@@ -2022,6 +2039,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
<,footnote=> <,footnote=>
<,catLabels=> <,catLabels=>
<,xLabels=> <,xLabels=>
<,xBothAxis=>
<,catLabelPos=> <,catLabelPos=>
<,xLabelPos=> <,xLabelPos=>
<,catLabelAttrs=> <,catLabelAttrs=>
@@ -2035,17 +2053,26 @@ The basic syntax is the following, the `<...>` means optional parameters:
<,catAxisValueAttrs=> <,catAxisValueAttrs=>
<,xaxisValueAttrs=> <,xaxisValueAttrs=>
<,xaxisTickstyle=> <,xaxisTickstyle=>
<,xaxisValues=>
<,xaxisValuesDisplay=>
<,xaxisValuesFormat=>
<,xaxisValuesRotate=>
<,xaxisOther=>
<,sganno=> <,sganno=>
<,odsGraphicsOptions=> <,odsGraphicsOptions=>
<,sgPlotOptions=> <,sgPlotOptions=>
<,vertical=>
<,VSCALE=> <,VSCALE=>
<,KERNEL_K=> <,KERNEL_K=>
<,KERNEL_C=> <,KERNEL_C=>
<,VSCALEmax=> <,VSCALEmax=>
<,minRange=>
<,maxRange=>
<,cleanTempData=> <,cleanTempData=>
<,codePreview=> <,codePreview=>
<,reuseN=>
) )
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
@@ -2086,6 +2113,28 @@ The basic syntax is the following, the `<...>` means optional parameters:
* `boxPlotSymbolSize` - *Optional*, default value `8px`. * `boxPlotSymbolSize` - *Optional*, default value `8px`.
Size of symbols on the box plot. Size of symbols on the box plot.
If two values are provided, e.g., `16px 8px`,
the first is used for diamond size (the mean),
the second for "min/max" bars.
* `boxPlotLineSize` - *Optional*, default value `1px`.
Thickness of lines of the box plot.
* `boxPlotFill` - *Optional*, default value `1`.
Transparency of the box plot.
Ranges from 0.0 (opaque) to 1.0 (full translucent).
* `meanShiftLine` - *Optional*, default value `0`.
Indicates if a line connecting mean symbol
on the Box Plot should be added.
* `meanShiftStep` - *Optional*, default value `0.1`.
Sets how smooth gradient should be
on the "mean-shift" line.
* `meanShiftColors` - *Optional*, default value is empty.
List of colours for plotting the "mean-shift" line.
Empty indicates that the `colorsList` value will be used.
* `colorsList` - *Optional*, default value is empty. * `colorsList` - *Optional*, default value is empty.
List of colours for plotting. List of colours for plotting.
@@ -2116,6 +2165,10 @@ The basic syntax is the following, the `<...>` means optional parameters:
When empty a data variable name is used. When empty a data variable name is used.
For details see notes below. For details see notes below.
* `xBothAxis` - *Optional*, default value is `1`.
Indicates if both (top and bottom) axis (horizontal) should be printed.
If not `1` then only bottom axis is displayed.
* `catLabelPos` - *Optional*, default value `DATACENTER`. * `catLabelPos` - *Optional*, default value `DATACENTER`.
Indicates position of the label on group axis (vertical). Indicates position of the label on group axis (vertical).
Allowed values are `BOTTOM`, `CENTER`, `DATACENTER`, and `TOP`. Allowed values are `BOTTOM`, `CENTER`, `DATACENTER`, and `TOP`.
@@ -2139,7 +2192,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
Indicates if the right vertical axis should be displayed. Indicates if the right vertical axis should be displayed.
* `y2axisLevels` - *Optional*, default value `4`. * `y2axisLevels` - *Optional*, default value `4`.
Indicates if the number of expected levels of values printed Sets the number of expected levels of values printed
on the right vertical axis. on the right vertical axis.
* `y2axisValueAttrs` - *Optional*, default value `Color=Grey`. * `y2axisValueAttrs` - *Optional*, default value `Color=Grey`.
@@ -2162,11 +2215,34 @@ The basic syntax is the following, the `<...>` means optional parameters:
Allowed values are `OUTSIDE`, `INSIDE`, `ACROSS`, and `INBETWEEN`. Allowed values are `OUTSIDE`, `INSIDE`, `ACROSS`, and `INBETWEEN`.
*For SAS previous to* **9.4M5** *set to missing!* *For SAS previous to* **9.4M5** *set to missing!*
* `xaxisValues` - *Optional*, default value is empty.
It is a wrapper to provide value for
the `XAXIS` statement, for `Values` option.
* `xaxisValuesDisplay` - *Optional*, default value is empty.
It is a wrapper to provide value for
the `XAXIS` statement, for `ValuesDisplay` option.
* `xaxisValuesFormat` - *Optional*, default value is empty.
It is a wrapper to provide value for
the `XAXIS` statement, for `ValuesFormat` option.
Instead using `w.d` format, use its alias `Fw.d`.
* `xaxisValuesRotate` - *Optional*, default value is empty.
It is a wrapper to provide value for
the `XAXIS` statement, for `ValuesRotate` option.
* `xaxisOther` - *Optional*, default value is empty.
It is a wrapper to provide value for
the `XAXIS` statement options not mentioned above.
You can use it to provide, e.g., `GRID`, 'MINOR',
`MINORGRID`, `GRIDATTRS=`, or `MINORGRIDATTRS=`.
* `sganno` - *Optional*, default value is empty. * `sganno` - *Optional*, default value is empty.
keeps name of a data set for the `sganno=` option keeps name of a data set for the `sganno=` option
of the SGPLOT procedure. of the SGPLOT procedure.
* `sgPlotOptions` - *Optional*, default value is `noautolegend noborder`. * `sgPlotOptions` - *Optional*, default value is `noautolegend noborder subpixel`.
List of additional options values for SGPLOT procedure. List of additional options values for SGPLOT procedure.
* `odsGraphicsOptions` - *Optional*, default value is empty. * `odsGraphicsOptions` - *Optional*, default value is empty.
@@ -2174,6 +2250,12 @@ The basic syntax is the following, the `<...>` means optional parameters:
By default only the: `width=`, `height=`, and `antialiasmax=` By default only the: `width=`, `height=`, and `antialiasmax=`
are modified. are modified.
* `vertical` - *Optional*, default value is `0`.
Set value to `1` to plot "clouds & boxes" vertically.
**NOTE:** *Before setting the parameter to `1`, first
prepare the plot in the "horizontal" version since all
other parameters assume that orientation(!) and then are
converted accordingly.*
***Stat related options***: ***Stat related options***:
@@ -2200,6 +2282,14 @@ The basic syntax is the following, the `<...>` means optional parameters:
for `VSCALE=PROPORTION` between 0 and 1, and for `VSCALE=PROPORTION` between 0 and 1, and
for `VSCALE=COUNT` between 0 and N (sample size). for `VSCALE=COUNT` between 0 and N (sample size).
* `minRange` - *Optional*, default value is `.` (numerical missing).
Indicates minimum value for x-axis on the plot, by default calculated form data.
Is a global parameter used for all plots.
* `maxRange` - *Optional*, default value is `.` (numerical missing).
Indicates maximum value for x-axis on the plot, by default calculated form data.
Is a global parameter used for all plots.
***Other options***: ***Other options***:
* `cleanTempData` - *Optional*, default value `1`. * `cleanTempData` - *Optional*, default value `1`.
@@ -2208,6 +2298,11 @@ The basic syntax is the following, the `<...>` means optional parameters:
* `codePreview` - *Optional*, default value `0`. * `codePreview` - *Optional*, default value `0`.
Indicates if source code should be MPRINTed to log. Indicates if source code should be MPRINTed to log.
* `reuseN` - *Optional*, default value `6`.
Indicates how many times colours list should be repeated
so that colours could be reused in case the number of groups
is greater than the colours list length.
--- ---
### NOTES: ################################################################### ### NOTES: ###################################################################
@@ -2222,10 +2317,10 @@ The basic syntax is the following, the `<...>` means optional parameters:
Use the `%str()` or `%nrstr()` macro-function to handle special characters. Use the `%str()` or `%nrstr()` macro-function to handle special characters.
The `%unquote()` is used when resolving the parameter. The `%unquote()` is used when resolving the parameter.
* The `catLabels` and `xLabels` should be quoted comma separated lists enclosed with brackets, * The `catLabels` and `xLabels` should be quoted comma-separated lists enclosed with brackets,
e.g. `catLabels=("Continent of Origin", "Car Type")`, see Example below. e.g. `catLabels=("Continent of Origin", "Car Type")`, see Example below.
* The `catLabelAttrs` and `xLabelAttrs` should be space separated lists of `key=value` pairs, * The `catLabelAttrs` and `xLabelAttrs` should be space-separated lists of `key=value` pairs,
e.g. `xLabelAttrs=size=12 color=Pink weight=bold`, see Example below. e.g. `xLabelAttrs=size=12 color=Pink weight=bold`, see Example below.
* Kernel density estimates and basic statistics are calculated with `PROC UNIVARIATE`. * Kernel density estimates and basic statistics are calculated with `PROC UNIVARIATE`.
@@ -2236,6 +2331,10 @@ The basic syntax is the following, the `<...>` means optional parameters:
* SAS notes (`NOTE:`) are disabled for the execution time. * SAS notes (`NOTE:`) are disabled for the execution time.
* Before setting the `vertical=` parameter to `1`, first prepare the plot
in the "horizontal" version since all other parameters assume that orientation(!)
and then are converted accordingly.
* List of predefined colours is: * List of predefined colours is:
`BlueViolet`, `RoyalBlue`, `OliveDrab`, `Gold`, `HotPink`, `Crimson`, `BlueViolet`, `RoyalBlue`, `OliveDrab`, `Gold`, `HotPink`, `Crimson`,
`MediumPurple`, `CornflowerBlue`, `YellowGreen`, `Goldenrod`, `Orchid`, `IndianRed`. `MediumPurple`, `CornflowerBlue`, `YellowGreen`, `Goldenrod`, `Orchid`, `IndianRed`.
@@ -2389,6 +2488,35 @@ The output can be seen in the `md` file.
The output can be seen in the `md` file. The output can be seen in the `md` file.
![Example 3](./baseplus_RainCloudPlot_Ex3.png) ![Example 3](./baseplus_RainCloudPlot_Ex3.png)
**EXAMPLE 4.** Rain Cloud plot for `sashelp.cars` dataset
with groups by Drive Train for Weight (LBS)
variable ploted "vertically":
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%RainCloudPlot(
sashelp.cars
, DriveTrain
, Weight
, HeightPX=400
, colorslist=Red Green Blue
, y2axisLevels=5
, catLabels=("DriveTrain")
, xLabels="Weight (LBS)"
, xLabelAttrs=size=12 color=Black weight=bold
, y2axisLines=1
, vscale=percent
, vscalemax=50
, vertical = 1
, title = %nrstr(title1 J=C HEIGHT=3 "The VERTICAL plotting is cool, ...";)
, footnote = %nrstr(footnote1 J=L HEIGHT=2 "... isn't it?";)
)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The output can be seen in the `md` file.
![Example 4](./baseplus_RainCloudPlot_Ex4.png)
--- ---
@@ -2722,7 +2850,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
## >>> `%unzipArch()` macro: <<< <a name="unziparch-macro"></a> ####################### ## >>> `%unzipArch()` macro: <<< <a name="unziparch-macro"></a> #######################
The unzipArch() macro allows to unzip content of a ZIP archive. The unzipArch() macro allows to unzip content of a ZIP archive.
Macro is OS independent, the `XCMD` option is not required. Macro is OS-independent, the `XCMD` option is not required.
The `dlCreateDir` option is used under the hood. The `dlCreateDir` option is used under the hood.
@@ -2955,7 +3083,7 @@ run;
## >>> `%zipArch()` macro: <<< <a name="ziparch-macro"></a> ####################### ## >>> `%zipArch()` macro: <<< <a name="ziparch-macro"></a> #######################
The zipArch() macro allows to ZIP content of a directory. The zipArch() macro allows to ZIP content of a directory.
Macro is OS independent, the `XCMD` option is not required. Macro is OS-independent, the `XCMD` option is not required.
Content of zipped archive can be listed in the log. Content of zipped archive can be listed in the log.
@@ -3092,9 +3220,9 @@ run;
The zipEvalf() and QzipEvalf() macro functions The zipEvalf() and QzipEvalf() macro functions
allow to use a function on elements of pair of allow to use a function on elements of pair of
space separated lists. space-separated lists.
For two space separated lists of text strings the corresponding For two space-separated lists of text strings the corresponding
elements are taken and the macro applies a function, provided by user, elements are taken and the macro applies a function, provided by user,
to calculate result of the function on taken elements. to calculate result of the function on taken elements.
@@ -3126,9 +3254,9 @@ The basic syntax is the following, the `<...>` means optional parameters:
**Arguments description**: **Arguments description**:
1. `first` - *Required*, a space separated list of texts. 1. `first` - *Required*, a space-separated list of texts.
2. `second` - *Required*, a space separated list of texts. 2. `second` - *Required*, a space-separated list of texts.
* `function = cat` - *Optional*, default value is `cat`, * `function = cat` - *Optional*, default value is `cat`,
a function which will be applied a function which will be applied
@@ -3145,18 +3273,18 @@ The basic syntax is the following, the `<...>` means optional parameters:
* `argBf =` - *Optional*, default value is empty, * `argBf =` - *Optional*, default value is empty,
arguments of the function inserted arguments of the function inserted
*before* elements the first list. *before* elements the first list.
If multiple should be comma separated. If multiple should be comma-separated.
* `argMd =` - *Optional*, default value is empty, * `argMd =` - *Optional*, default value is empty,
arguments of the function inserted arguments of the function inserted
*between* elements the first list and *between* elements the first list and
the second list. the second list.
If multiple should be comma separated. If multiple should be comma-separated.
* `argAf =` - *Optional*, default value is empty, * `argAf =` - *Optional*, default value is empty,
arguments of the function inserted arguments of the function inserted
*after* elements the second list. *after* elements the second list.
If multiple should be comma separated. If multiple should be comma-separated.
* `format=` - *Optional*, default value is empty, * `format=` - *Optional*, default value is empty,
indicates a format which should be used indicates a format which should be used
@@ -5388,11 +5516,13 @@ Macro can be executed in two possible ways:
run; run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2) by create a dataset with a list of links and use of `DS=` and `DSvar=` parameters. 2) by create a dataset with a list of links and use of `DS=`, `DSvar=`,
and `DSout=` parameters:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%downloadFilesTo(</path/to/target/directory> %downloadFilesTo(</path/to/target/directory>
, DS=<dataset with list> , DS=<dataset with list>
, DSvar=<variable with list> , DSvar=<variable with list>
, DSout=<variable with names for downloaded files>
) )
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -5410,6 +5540,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
target target
<,DS=> <,DS=>
<,DSvar=link> <,DSvar=link>
<,DSout=scan(link,-1,"/\")>
<,inDev=URL> <,inDev=URL>
<,outDev=DISK> <,outDev=DISK>
<,inOptions=> <,inOptions=>
@@ -5428,6 +5559,10 @@ The basic syntax is the following, the `<...>` means optional parameters:
*. `DSvar= ` - *Optional*, name of variable in data set *. `DSvar= ` - *Optional*, name of variable in data set
with list of files to download. with list of files to download.
*. `DSout=` - *Optional*, name of variable in data set
with list of names for to downloaded files.
Default value is: `scan(link,-1,"/\")` it is
an expression to cut last part of the link.
*. `inDev=` - *Optional*, type of device used by the *. `inDev=` - *Optional*, type of device used by the
`filename()` function to access incoming files. `filename()` function to access incoming files.
@@ -5451,8 +5586,8 @@ The basic syntax is the following, the `<...>` means optional parameters:
### EXAMPLES AND USECASES: #################################################### ### EXAMPLES AND USECASES: ####################################################
**EXAMPLE 1.** Download data from web with diect list and then copy between directories: **EXAMPLE 1.** Download data from web with direct list and then copy between directories:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
resetline; resetline;
%downloadFilesTo(~/directoryA) %downloadFilesTo(~/directoryA)
datalines4; datalines4;
@@ -5467,11 +5602,11 @@ datalines4;
~/directoryA/WUSS-2023-Paper-189.zip ~/directoryA/WUSS-2023-Paper-189.zip
;;;; ;;;;
run; run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 2.** Download data from web using data set with list: **EXAMPLE 2.** Download data from web using data set with list:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
resetline; resetline;
data listOfFiles; data listOfFiles;
infile cards; infile cards;
@@ -5483,7 +5618,7 @@ https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-109.pdf
run; run;
%downloadFilesTo(R:\directoryC, DS=listOfFiles, DSvar=files) %downloadFilesTo(R:\directoryC, DS=listOfFiles, DSvar=files)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--- ---
@@ -5727,7 +5862,125 @@ The basic syntax is the following, the `<...>` means optional parameters:
--- ---
## `%gettitle()` macro <a name="gettitle-macro-64"></a> ###### ## `%generateoneliners()` macro <a name="generateoneliners-macro-64"></a> ######
## >>> `%GenerateOneLiners()` macro: <<< <a name="generateoneliners-macro"></a> #######################
The `%GenerateOneLiners()` macro is a "macro-generator" dedicated
to "lazy typers".
It allows to generate macro wrappers for functions
that have the following form:
~~~~~~~~~~~~~~~~~~~~~~~sas
%macro FUNCTION()/parmbuff;
%sysfunc(FUNCTION&syspbuff)
%mend FUNCTION;
%macro qFUNCTION()/parmbuff;
%qsysfunc(FUNCTION&syspbuff)
%mend qFUNCTION;
~~~~~~~~~~~~~~~~~~~~~~~
See examples below for the details.
The `%GenerateOneLiners()` macro is not pure macro code.
### SYNTAX: ###################################################################
The basic syntax is the following, the `<...>` means optional parameters:
~~~~~~~~~~~~~~~~~~~~~~~sas
%GenerateOneLiners(
<,listOfFunctions=>
<,prefix=>
)
~~~~~~~~~~~~~~~~~~~~~~~
**Arguments description**:
1. `listOfFunctions` - *Required*, is a space separated list of
valid SAS functions. Default value is:
`CATX CATQ CATT CAT COMPRESS REVERSE REPEAT`.
2. `prefix` - *Optional*, a prefix added to the name
of a created macro.
---
### EXAMPLES AND USECASES: ####################################################
**EXAMPLE 1.** Create list of macrofunctions for
`CATX CATQ CATT CAT COMPRESS REVERSE REPEAT`:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%GenerateOneLiners(prefix=_)
%let a = 1,2,3,4,5,6;
%put %_CATX(%str( ),&a.);
%put %_CATQ(2A,&a.);
%put %_QCATQ(1AMD,%str(,),&a.);
%let x=a 1 b 2 c 3 d 4 e 5 f 6 g;
%put %_COMPRESS(&x.);
%put %_COMPRESS(&x.,,ka);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 2.** Create list of macrofunctions for
`SUM MEAN MEDIAN VAR STD USS CSS RANGE IQR MAD SUMABS`:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%GenerateOneLiners(
listOfFunctions=SUM MEAN MEDIAN VAR STD USS CSS RANGE IQR MAD SUMABS
, prefix=_)
%put
%_SUM(1,2,3,4,5,6)
%_MEAN(1,2,3,4,5,6)
%_MEDIAN(1,2,3,4,5,6)
%_VAR(1,2,3,4,5,6)
;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 3.** Some other lists:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%GenerateOneLiners(prefix=_
, listOfFunctions=CDF PDF RAND QUANTILE SQUANTILE SDF logCDF logPDF logSDF RMS
)
%GenerateOneLiners(prefix=_
, listOfFunctions=YEAR QTR MONTH WEEK DAY HOUR MINUTE SECOND
)
%GenerateOneLiners(prefix=_
, listOfFunctions=PCTL1 PCTL2 PCTL3 PCTL4 PCTL5 PCTL
)
%GenerateOneLiners(prefix=_
, listOfFunctions=YYQ MDY HMS INTCK INTNX SLEEP
)
%GenerateOneLiners(prefix=_
, listOfFunctions=WHICHC WHICHN
)
%GenerateOneLiners(prefix=_
, listOfFunctions=SYMEXIST SYMGLOBL SYMLOCAL
)
%GenerateOneLiners(prefix=_
, listOfFunctions=PRXCHANGE PRXMATCH PRXPAREN PRXPARSE
)
%GenerateOneLiners(prefix=_
, listOfFunctions=MD5 SHA256 HASHING
)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
---
## `%gettitle()` macro <a name="gettitle-macro-65"></a> ######
## >>> `%getTitle()` macro: <<< <a name="gettitle-macro"></a> ####################### ## >>> `%getTitle()` macro: <<< <a name="gettitle-macro"></a> #######################
@@ -5759,7 +6012,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
1. `number` - *Optional*, default value is empty, 1. `number` - *Optional*, default value is empty,
indicates numbers of titles to be extracted. indicates numbers of titles to be extracted.
Space separated list is expected. Space-separated list is expected.
If empty or `_ALL_` extract all non-missing. If empty or `_ALL_` extract all non-missing.
*. `type` - *Optional*, default value is `T`. *. `type` - *Optional*, default value is `T`.
@@ -5813,7 +6066,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
--- ---
## `%iffunc()` macro <a name="iffunc-macro-65"></a> ###### ## `%iffunc()` macro <a name="iffunc-macro-66"></a> ######
## >>> `%iffunc()` macro: <<< <a name="iffunc-macro"></a> ####################### ## >>> `%iffunc()` macro: <<< <a name="iffunc-macro"></a> #######################
@@ -5918,7 +6171,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
**EXAMPLE 4.** Macro-Functions works too: **EXAMPLE 4.** Macro-Functions works too:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%let x = A B C; %let x = A B C;
%put %iffunc((%scan(&x.,1)=A),Stats with "A"., Does not start with "A".); %put %iffunc((%scan(&x.,1)=A),Starts with "A"., Does not start with "A".);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -6014,7 +6267,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
--- ---
## `%infmt()` macro <a name="infmt-macro-66"></a> ###### ## `%infmt()` macro <a name="infmt-macro-67"></a> ######
## >>> `%infmt()` macro: <<< <a name="infmt-macro"></a> ####################### ## >>> `%infmt()` macro: <<< <a name="infmt-macro"></a> #######################
@@ -6071,7 +6324,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
--- ---
## `%letters()` macro <a name="letters-macro-67"></a> ###### ## `%letters()` macro <a name="letters-macro-68"></a> ######
## >>> `%letters()` macro: <<< <a name="letters-macro"></a> ####################### ## >>> `%letters()` macro: <<< <a name="letters-macro"></a> #######################
@@ -6126,7 +6379,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
### EXAMPLES AND USECASES: #################################################### ### EXAMPLES AND USECASES: ####################################################
**EXAMPLE 1.** Space separated list of capital letters from A to Z: **EXAMPLE 1.** Space-separated list of capital letters from A to Z:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%put %letters(1:26:1); %put %letters(1:26:1);
@@ -6189,7 +6442,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
--- ---
## `%libpath()` macro <a name="libpath-macro-68"></a> ###### ## `%libpath()` macro <a name="libpath-macro-69"></a> ######
## >>> `%libPath()` macro: <<< <a name="libpath-macro"></a> ####################### ## >>> `%libPath()` macro: <<< <a name="libpath-macro"></a> #######################
@@ -6234,7 +6487,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
--- ---
## `%minclude()` macro <a name="minclude-macro-69"></a> ###### ## `%minclude()` macro <a name="minclude-macro-70"></a> ######
## >>> `%mInclude()` macro: <<< <a name="minclude-macro"></a> ####################### ## >>> `%mInclude()` macro: <<< <a name="minclude-macro"></a> #######################
@@ -6447,7 +6700,7 @@ quit;
--- ---
## `%monthshift()` macro <a name="monthshift-macro-70"></a> ###### ## `%monthshift()` macro <a name="monthshift-macro-71"></a> ######
## >>> `%monthShift()` macro: <<< <a name="monthshift-macro"></a> ####################### ## >>> `%monthShift()` macro: <<< <a name="monthshift-macro"></a> #######################
@@ -6596,7 +6849,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
--- ---
## `%replist()` macro <a name="replist-macro-71"></a> ###### ## `%replist()` macro <a name="replist-macro-72"></a> ######
## >>> `%repList()` macro: <<< <a name="replist-macro"></a> ####################### ## >>> `%repList()` macro: <<< <a name="replist-macro"></a> #######################
@@ -6624,9 +6877,9 @@ The basic syntax is the following, the `<...>` means optional parameters:
**Arguments description**: **Arguments description**:
1. `list` - *Required*, a list of elements to be repeated. 1. `list` - *Required*, a list of elements to be repeated.
List can be space or comma separated. List can be space or comma-separated.
Elements can be in quotes. Elements can be in quotes.
For comma separated list add brackets For comma-separated list add brackets
e.g., `%repList((A,B,C,D),times=5)`. e.g., `%repList((A,B,C,D),times=5)`.
The list separators are: `<{[( ,;)]}>`. The list separators are: `<{[( ,;)]}>`.
@@ -6712,7 +6965,7 @@ run;
--- ---
## `%time()` macro <a name="time-macro-72"></a> ###### ## `%time()` macro <a name="time-macro-73"></a> ######
## >>> `%time()` macro: <<< <a name="time-macro"></a> ####################### ## >>> `%time()` macro: <<< <a name="time-macro"></a> #######################
@@ -6755,7 +7008,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
--- ---
## `%today()` macro <a name="today-macro-73"></a> ###### ## `%today()` macro <a name="today-macro-74"></a> ######
## >>> `%today()` macro: <<< <a name="today-macro"></a> ####################### ## >>> `%today()` macro: <<< <a name="today-macro"></a> #######################
@@ -6798,7 +7051,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
--- ---
## `%translate()` macro <a name="translate-macro-74"></a> ###### ## `%translate()` macro <a name="translate-macro-75"></a> ######
## >>> `%translate()` macro: <<< <a name="translate-macro"></a> ####################### ## >>> `%translate()` macro: <<< <a name="translate-macro"></a> #######################
@@ -6862,7 +7115,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
--- ---
## `%tranwrd()` macro <a name="tranwrd-macro-75"></a> ###### ## `%tranwrd()` macro <a name="tranwrd-macro-76"></a> ######
## >>> `%tranwrd()` macro: <<< <a name="tranwrd-macro"></a> ####################### ## >>> `%tranwrd()` macro: <<< <a name="tranwrd-macro"></a> #######################
@@ -6929,7 +7182,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
--- ---
## `%workpath()` macro <a name="workpath-macro-76"></a> ###### ## `%workpath()` macro <a name="workpath-macro-77"></a> ######
## >>> `%workPath()` macro: <<< <a name="workpath-macro"></a> ####################### ## >>> `%workPath()` macro: <<< <a name="workpath-macro"></a> #######################

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

7035
hist/1.38.0/baseplus.md Normal file

File diff suppressed because it is too large Load Diff

BIN
hist/1.38.0/baseplus.zip Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

7045
hist/1.39.0/baseplus.md Normal file

File diff suppressed because it is too large Load Diff

BIN
hist/1.39.0/baseplus.zip Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

7071
hist/1.40.0/baseplus.md Normal file

File diff suppressed because it is too large Load Diff

BIN
hist/1.40.0/baseplus.zip Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

7122
hist/1.41.0/baseplus.md Normal file

File diff suppressed because it is too large Load Diff

BIN
hist/1.41.0/baseplus.zip Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

7241
hist/1.42.0/baseplus.md Normal file

File diff suppressed because it is too large Load Diff

BIN
hist/1.42.0/baseplus.zip Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

7242
hist/1.42.1/baseplus.md Normal file

File diff suppressed because it is too large Load Diff

BIN
hist/1.42.1/baseplus.zip Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

7249
hist/1.43.0/baseplus.md Normal file

File diff suppressed because it is too large Load Diff

BIN
hist/1.43.0/baseplus.zip Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB