Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c88e524d3d | ||
|
|
f9fa786ab3 | ||
|
|
3aaf69ebab | ||
|
|
1d474a79e4 | ||
|
|
9b9d9dea38 | ||
|
|
21316add63 |
@@ -54,7 +54,7 @@ libname NEW "%workPath()/new";
|
||||
```
|
||||
and more.
|
||||
|
||||
SHA256 digest for the latest version of `BasePlus`: F*8155BFE82F7833E4B0DA24D81DBDFC58463906D6032B1F0161772DADE84BE790
|
||||
SHA256 digest for the latest version of `BasePlus`: F*3C3A2050E3FF46E1FC0F936634A66FC3F294A3531EFE0A7DC9CE74F2EF17C687
|
||||
|
||||
[**Documentation for BasePlus**](./baseplus.md "Documentation for BasePlus")
|
||||
|
||||
|
||||
207
baseplus.md
@@ -1,28 +1,30 @@
|
||||
# Documentation for the `BasePlus` package.
|
||||
|
||||
---
|
||||
----------------------------------------------------------------
|
||||
|
||||
*The BASE SAS plus a bunch of functionalities I am missing in BASE SAS*
|
||||
|
||||
----------------------------------------------------------------
|
||||
|
||||
### Version information:
|
||||
|
||||
*The BASE SAS plus a bunch of functionalities I am missing in BASE SAS*
|
||||
|
||||
- Package: BasePlus
|
||||
- Version: 1.37.0
|
||||
- Generated: 2024-03-09T13:28:58
|
||||
- Version: 1.39.0
|
||||
- Generated: 2024-05-29T16:15:54
|
||||
- Author(s): Bartosz Jablonski (yabwon@gmail.com), Quentin McMullen (qmcmullen@gmail.com)
|
||||
- Maintainer(s): Bartosz Jablonski (yabwon@gmail.com)
|
||||
- License: MIT
|
||||
- File SHA256: `F*8155BFE82F7833E4B0DA24D81DBDFC58463906D6032B1F0161772DADE84BE790` for this version
|
||||
- Content SHA256: `C*7A4A85EB6C2C23E6A171DDCD8F61D7ED40E9A6751F9579DF893E148A95FFE188` for this version
|
||||
- File SHA256: `F*3C3A2050E3FF46E1FC0F936634A66FC3F294A3531EFE0A7DC9CE74F2EF17C687` for this version
|
||||
- Content SHA256: `C*2396916BBB5BC1FA832FB85EDAF14173D528A6C823BA0BACB84FC9E99A8CFC1B` for this version
|
||||
|
||||
---
|
||||
|
||||
# The `BasePlus` package, version: `1.37.0`;
|
||||
# The `BasePlus` package, version: `1.39.0`;
|
||||
|
||||
---
|
||||
|
||||
|
||||
# The BasePlus package [ver. 1.37.0] <a name="baseplus-package"></a> ###############################################
|
||||
# The BasePlus package [ver. 1.39.0] <a name="baseplus-package"></a> ###############################################
|
||||
|
||||
The **BasePlus** package implements useful
|
||||
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
|
||||
%downloadFilesTo(~/directoryA)
|
||||
datalines4;
|
||||
@@ -362,7 +364,7 @@ run;
|
||||
**EXAMPLE 27** Conditional value assignment:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
%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.;
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -382,7 +384,7 @@ 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 `20240529`*
|
||||
|
||||
--------------------------------------------------------------------
|
||||
|
||||
@@ -516,8 +518,8 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
## >>> `%dedupListC()` macro: <<< <a name="deduplistc-macro"></a> #######################
|
||||
|
||||
The `%dedupListC()` macro deletes duplicated values from
|
||||
a *COMMA separated* list of values. List, including separators,
|
||||
can be no longer than a value carried by a single macrovariable.
|
||||
a *COMMA-separated* list of values. List, including separators,
|
||||
can be no longer than a value carried by a single macro variable.
|
||||
|
||||
Returned value is *unquoted*. Leading and trailing spaces are ignored.
|
||||
|
||||
@@ -534,7 +536,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
|
||||
**Arguments description**:
|
||||
|
||||
1. `list` - A list of *comma separated* values.
|
||||
1. `list` - A list of *comma-separated* values.
|
||||
|
||||
|
||||
### EXAMPLES AND USECASES: ####################################################
|
||||
@@ -577,8 +579,8 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
## >>> `%dedupListP()` macro: <<< <a name="deduplistp-macro"></a> #######################
|
||||
|
||||
The `%dedupListP()` macro deletes duplicated values from
|
||||
a *PIPE(`|`) separated* list of values. List, including separators,
|
||||
can be no longer than a value carried by a single macrovariable.
|
||||
a *PIPE(`|`)-separated* list of values. List, including separators,
|
||||
can be no longer than a value carried by a single macro variable.
|
||||
|
||||
Returned value is *unquoted*. Leading and trailing spaces are ignored.
|
||||
|
||||
@@ -595,7 +597,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
|
||||
**Arguments description**:
|
||||
|
||||
1. `list` - A list of *pipe separated* values.
|
||||
1. `list` - A list of *pipe-separated* values.
|
||||
|
||||
|
||||
### EXAMPLES AND USECASES: ####################################################
|
||||
@@ -638,8 +640,8 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
## >>> `%dedupListS()` macro: <<< <a name="deduplists-macro"></a> #######################
|
||||
|
||||
The `%dedupListS()` macro deletes duplicated values from
|
||||
a *SPACE separated* list of values. List, including separators,
|
||||
can be no longer than a value carried by a single macrovariable.
|
||||
a *SPACE-separated* list of values. List, including separators,
|
||||
can be no longer than a value carried by a single macro variable.
|
||||
|
||||
Returned value is *unquoted*.
|
||||
|
||||
@@ -650,13 +652,13 @@ The `%dedupListS()` macro executes like a pure macro code.
|
||||
The basic syntax is the following, the `<...>` means optional parameters:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
%dedupListS(
|
||||
list of space separated values
|
||||
list of space-separated values
|
||||
)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
**Arguments description**:
|
||||
|
||||
1. `list` - A list of *space separated* values.
|
||||
1. `list` - A list of *space-separated* values.
|
||||
|
||||
|
||||
### EXAMPLES AND USECASES: ####################################################
|
||||
@@ -692,9 +694,9 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
## >>> `%dedupListX()` macro: <<< <a name="deduplistx-macro"></a> #######################
|
||||
|
||||
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,
|
||||
can be no longer than a value carried by a single macrovariable.
|
||||
can be no longer than a value carried by a single macro variable.
|
||||
|
||||
**Caution.** The value of `X` *has to be* in **the first** byte of the list,
|
||||
just after the opening bracket, i.e. `(X...)`.
|
||||
@@ -714,7 +716,7 @@ XlistXofXxXseparatedXvalues
|
||||
|
||||
**Arguments description**:
|
||||
|
||||
1. `list` - A list of *X separated* values.
|
||||
1. `list` - A list of *X-separated* values.
|
||||
|
||||
|
||||
### EXAMPLES AND USECASES: ####################################################
|
||||
@@ -773,7 +775,7 @@ 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
|
||||
is extracted (information is OS-dependent and gives different results for Linux
|
||||
and for Windows)
|
||||
|
||||
The extracted info can be narrowed down to files (`keepFiles=1`) or to
|
||||
@@ -835,7 +837,8 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
in long format, `1` = yes, `0` = no.
|
||||
|
||||
* `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
|
||||
maximum depth of search in the root path.
|
||||
@@ -1093,12 +1096,12 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
%put *%str(%')%bquote(%getVars(sashelp.class,sep=''))%str(%')*;
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
c) coma separated double quote list:
|
||||
c) comma-separated double quote list:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
%put *"%getVars(sashelp.class,sep=%str(", "))"*;
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
d) coma separated single quote list:
|
||||
d) comma-separated single quote list:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
%put *%str(%')%getVars(sashelp.class,sep=', ')%str(%')*;
|
||||
%let x = %str(%')%getVars(sashelp.class,sep=', ')%str(%');
|
||||
@@ -1163,12 +1166,12 @@ a) one single or double qiote:
|
||||
%put *%QgetVars(sashelp.class,quote='')*;
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
c) coma separated double quote list:
|
||||
c) comma-separated double quote list:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
%put *%getVars(sashelp.class,sep=%str(,),quote=%str(%"))*;
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
d) coma separated single quote list:
|
||||
d) comma-separated single quote list:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
%let x = %getVars(sashelp.class,sep=%str(,),quote=%str(%'));
|
||||
%put &=x.;
|
||||
@@ -1484,8 +1487,8 @@ run;
|
||||
This approach reduces some limitations the LDSN has.
|
||||
|
||||
The **additional** feature of the `%LDSNM()` is that when the macro is called
|
||||
a global macrovariable, which name is the same as hashed dataset name, is created.
|
||||
The macrovariable value is the text of the argument of the macro. For example
|
||||
a global macro variable, which name is the same as hashed dataset name, is created.
|
||||
The macro variable value is the text of the argument of the macro. For example
|
||||
the following macro call:
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
@@ -1495,9 +1498,9 @@ data %LDSNM(John "x" 'y' dog);
|
||||
run;
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
creates `DSN_BF1F8C4D6495B34A_` macrovariable with value: `JOHN "X" 'Y' DOG`.
|
||||
creates `DSN_BF1F8C4D6495B34A_` macro variable with value: `JOHN "X" 'Y' DOG`.
|
||||
|
||||
The macrovariable is useful when combined with `symget()` function and
|
||||
The macro variable is useful when combined with `symget()` function and
|
||||
the `indsname=` option to get the original text string value back,
|
||||
like in this example:
|
||||
|
||||
@@ -1535,7 +1538,7 @@ The `%LDSN()` macro executes like a pure macro code.
|
||||
`data %LDSN(); run;` or `data %LDSN( ); run;` are resolved
|
||||
to empty string, so the result is equivalent to `data; run;`
|
||||
|
||||
- created macrovariable is _global_ in scope.
|
||||
- created macro variable is _global_ in scope.
|
||||
|
||||
### SYNTAX: ###################################################################
|
||||
|
||||
@@ -1546,8 +1549,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
|
||||
assume it contain library as prefix or data set options as sufix.
|
||||
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 suffix.
|
||||
See the `%LDSN()` macro for comparison.
|
||||
|
||||
---
|
||||
@@ -1778,9 +1781,9 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
## >>> `%QdedupListX()` macro: <<< <a name="qdeduplistx-macro"></a> #######################
|
||||
|
||||
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,
|
||||
can be no longer than a value carried by a single macrovariable.
|
||||
can be no longer than a value carried by a single macro variable.
|
||||
|
||||
**Caution.** The value of `X` *has to be* in **the first** byte of the list,
|
||||
just after the opening bracket, i.e. `(X...)`.
|
||||
@@ -1800,7 +1803,7 @@ XlistXofXxXseparatedXvalues
|
||||
|
||||
**Arguments description**:
|
||||
|
||||
1. `list` - A list of *X separated* values.
|
||||
1. `list` - A list of *X-separated* values.
|
||||
|
||||
|
||||
### EXAMPLES AND USECASES: ####################################################
|
||||
@@ -1910,9 +1913,9 @@ See examples in `%getVars()` help for the details.
|
||||
|
||||
The zipEvalf() and QzipEvalf() macro functions
|
||||
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,
|
||||
to calculate result of the function on taken elements.
|
||||
|
||||
@@ -1944,9 +1947,9 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
|
||||
**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`,
|
||||
a function which will be applied
|
||||
@@ -1963,18 +1966,18 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
* `argBf =` - *Optional*, default value is empty,
|
||||
arguments of the function inserted
|
||||
*before* elements the first list.
|
||||
If multiple should be comma separated.
|
||||
If multiple should be comma-separated.
|
||||
|
||||
* `argMd =` - *Optional*, default value is empty,
|
||||
arguments of the function inserted
|
||||
*between* elements the first list and
|
||||
the second list.
|
||||
If multiple should be comma separated.
|
||||
If multiple should be comma-separated.
|
||||
|
||||
* `argAf =` - *Optional*, default value is empty,
|
||||
arguments of the function inserted
|
||||
*after* elements the second list.
|
||||
If multiple should be comma separated.
|
||||
If multiple should be comma-separated.
|
||||
|
||||
* `format=` - *Optional*, default value is empty,
|
||||
indicates a format which should be used
|
||||
@@ -1995,8 +1998,8 @@ See examples in `%zipEvalf()` help for the details.
|
||||
|
||||
## >>> `%RainCloudPlot()` macro: <<< <a name="raincloudplot-macro"></a> #######################
|
||||
|
||||
The RainCloudPlot() macro allow to plot Rain Cloud plots, i.e. pots of
|
||||
kernel density estimates, jitter data values, and box-and-whiskers plot.
|
||||
The RainCloudPlot() macro allow to plot Rain Cloud plots, i.e.
|
||||
plots of kernel density estimates, jitter data values, and box-and-whiskers plot.
|
||||
|
||||
See examples below for the details.
|
||||
|
||||
@@ -2174,6 +2177,12 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
By default only the: `width=`, `height=`, and `antialiasmax=`
|
||||
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***:
|
||||
|
||||
@@ -2222,10 +2231,10 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
Use the `%str()` or `%nrstr()` macro-function to handle special characters.
|
||||
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.
|
||||
|
||||
* 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.
|
||||
|
||||
* Kernel density estimates and basic statistics are calculated with `PROC UNIVARIATE`.
|
||||
@@ -2236,6 +2245,10 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
|
||||
* 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:
|
||||
`BlueViolet`, `RoyalBlue`, `OliveDrab`, `Gold`, `HotPink`, `Crimson`,
|
||||
`MediumPurple`, `CornflowerBlue`, `YellowGreen`, `Goldenrod`, `Orchid`, `IndianRed`.
|
||||
@@ -2389,6 +2402,35 @@ The output can be seen in the `md` file.
|
||||
The output can be seen in the `md` file.
|
||||

|
||||
|
||||
|
||||
**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.
|
||||

|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -2646,12 +2688,12 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
|
||||
## >>> `%symdelGlobal()` macro: <<< <a name="symdelglobal-macro"></a> #######################
|
||||
|
||||
The `%symdelGlobal()` macro deletes all global macrovariables
|
||||
The `%symdelGlobal()` macro deletes all global macro variables
|
||||
created by the user. The only exceptions are read only variables
|
||||
and variables the one which starts with SYS, AF, or FSP.
|
||||
In that case a warning is printed in the log.
|
||||
|
||||
One temporary global macrovariable `________________98_76_54_32_10_`
|
||||
One temporary global macro variable `________________98_76_54_32_10_`
|
||||
and a dataset, in `work` library, named `_%sysfunc(datetime(),hex7.)`
|
||||
are created and deleted during the process.
|
||||
|
||||
@@ -2676,7 +2718,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
### EXAMPLES AND USECASES: ####################################################
|
||||
|
||||
**EXAMPLE 1.** Basic use-case one.
|
||||
Delete global macrovariables, info notes
|
||||
Delete global macro variables, info notes
|
||||
and warnings are printed in the log.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
@@ -2696,7 +2738,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
**EXAMPLE 2.** Basic use-case two.
|
||||
Delete global macrovariables in quite mode
|
||||
Delete global macro variables in quite mode
|
||||
No info notes and warnings are printed in the log.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
@@ -2722,7 +2764,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
## >>> `%unzipArch()` macro: <<< <a name="unziparch-macro"></a> #######################
|
||||
|
||||
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.
|
||||
|
||||
@@ -2955,7 +2997,7 @@ run;
|
||||
## >>> `%zipArch()` macro: <<< <a name="ziparch-macro"></a> #######################
|
||||
|
||||
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.
|
||||
|
||||
@@ -3092,9 +3134,9 @@ run;
|
||||
|
||||
The zipEvalf() and QzipEvalf() macro functions
|
||||
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,
|
||||
to calculate result of the function on taken elements.
|
||||
|
||||
@@ -3126,9 +3168,9 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
|
||||
**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`,
|
||||
a function which will be applied
|
||||
@@ -3145,18 +3187,18 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
* `argBf =` - *Optional*, default value is empty,
|
||||
arguments of the function inserted
|
||||
*before* elements the first list.
|
||||
If multiple should be comma separated.
|
||||
If multiple should be comma-separated.
|
||||
|
||||
* `argMd =` - *Optional*, default value is empty,
|
||||
arguments of the function inserted
|
||||
*between* elements the first list and
|
||||
the second list.
|
||||
If multiple should be comma separated.
|
||||
If multiple should be comma-separated.
|
||||
|
||||
* `argAf =` - *Optional*, default value is empty,
|
||||
arguments of the function inserted
|
||||
*after* elements the second list.
|
||||
If multiple should be comma separated.
|
||||
If multiple should be comma-separated.
|
||||
|
||||
* `format=` - *Optional*, default value is empty,
|
||||
indicates a format which should be used
|
||||
@@ -3205,7 +3247,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
**EXAMPLE 5.** Use with macrovariables:
|
||||
**EXAMPLE 5.** Use with macro variables:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
%let abc = 10 100 1000;
|
||||
%put *
|
||||
@@ -5388,11 +5430,13 @@ Macro can be executed in two possible ways:
|
||||
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
|
||||
%downloadFilesTo(</path/to/target/directory>
|
||||
, DS=<dataset with list>
|
||||
, DSvar=<variable with list>
|
||||
, DSout=<variable with names for downloaded files>
|
||||
)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -5410,6 +5454,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
target
|
||||
<,DS=>
|
||||
<,DSvar=link>
|
||||
<,DSout=scan(link,-1,"/\")>
|
||||
<,inDev=URL>
|
||||
<,outDev=DISK>
|
||||
<,inOptions=>
|
||||
@@ -5428,6 +5473,10 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
*. `DSvar= ` - *Optional*, name of variable in data set
|
||||
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
|
||||
`filename()` function to access incoming files.
|
||||
@@ -5451,8 +5500,8 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
|
||||
### EXAMPLES AND USECASES: ####################################################
|
||||
|
||||
**EXAMPLE 1.** Download data from web with diect list and then copy between directories:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
**EXAMPLE 1.** Download data from web with direct list and then copy between directories:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
resetline;
|
||||
%downloadFilesTo(~/directoryA)
|
||||
datalines4;
|
||||
@@ -5467,11 +5516,11 @@ datalines4;
|
||||
~/directoryA/WUSS-2023-Paper-189.zip
|
||||
;;;;
|
||||
run;
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
**EXAMPLE 2.** Download data from web using data set with list:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
resetline;
|
||||
data listOfFiles;
|
||||
infile cards;
|
||||
@@ -5483,7 +5532,7 @@ https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-109.pdf
|
||||
run;
|
||||
|
||||
%downloadFilesTo(R:\directoryC, DS=listOfFiles, DSvar=files)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
---
|
||||
|
||||
@@ -5759,7 +5808,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
|
||||
1. `number` - *Optional*, default value is empty,
|
||||
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.
|
||||
|
||||
*. `type` - *Optional*, default value is `T`.
|
||||
@@ -5918,7 +5967,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
**EXAMPLE 4.** Macro-Functions works too:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
%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".);
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@@ -6126,7 +6175,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
|
||||
### 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
|
||||
%put %letters(1:26:1);
|
||||
|
||||
@@ -6249,7 +6298,7 @@ Link: `https://blogs.sas.com/content/sgf/2023/05/30/embedding-any-code-anywhere-
|
||||
|
||||
The implementation presented, in contrary to inspiration source, is
|
||||
based on the `doSubL()` function and a list of global
|
||||
macrovariables of the form `______<N>` (six underscores and a number).
|
||||
macro variables of the form `______<N>` (six underscores and a number).
|
||||
|
||||
See examples below for the details.
|
||||
|
||||
@@ -6279,7 +6328,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
Sets the `lrecl` value for the file width.
|
||||
|
||||
*. `symdel=1` - *Optional*, default value is `1`.
|
||||
Indicates if the global macrovariables
|
||||
Indicates if the global macro variables
|
||||
`______1` to `______N` should be deleted
|
||||
when the macro ends.
|
||||
|
||||
@@ -6624,9 +6673,9 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
||||
**Arguments description**:
|
||||
|
||||
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.
|
||||
For comma separated list add brackets
|
||||
For comma-separated list add brackets
|
||||
e.g., `%repList((A,B,C,D),times=5)`.
|
||||
The list separators are: `<{[( ,;)]}>`.
|
||||
|
||||
|
||||
BIN
baseplus.zip
BIN
baseplus_RainCloudPlot_Ex4.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
7035
hist/1.38.0/baseplus.md
Normal file
BIN
hist/1.38.0/baseplus.zip
Normal file
BIN
hist/1.38.0/baseplus_RainCloudPlot_Ex0.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
hist/1.38.0/baseplus_RainCloudPlot_Ex1x.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
hist/1.38.0/baseplus_RainCloudPlot_Ex1y.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
hist/1.38.0/baseplus_RainCloudPlot_Ex2a.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
hist/1.38.0/baseplus_RainCloudPlot_Ex2b.png
Normal file
|
After Width: | Height: | Size: 61 KiB |
BIN
hist/1.38.0/baseplus_RainCloudPlot_Ex3.png
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
hist/1.38.0/baseplus_RainCloudPlot_Ex4.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
7045
hist/1.39.0/baseplus.md
Normal file
BIN
hist/1.39.0/baseplus.zip
Normal file
BIN
hist/1.39.0/baseplus_RainCloudPlot_Ex0.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
hist/1.39.0/baseplus_RainCloudPlot_Ex1x.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
hist/1.39.0/baseplus_RainCloudPlot_Ex1y.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
hist/1.39.0/baseplus_RainCloudPlot_Ex2a.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
hist/1.39.0/baseplus_RainCloudPlot_Ex2b.png
Normal file
|
After Width: | Height: | Size: 61 KiB |
BIN
hist/1.39.0/baseplus_RainCloudPlot_Ex3.png
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
hist/1.39.0/baseplus_RainCloudPlot_Ex4.png
Normal file
|
After Width: | Height: | Size: 54 KiB |