12 Commits

Author SHA1 Message Date
SASPAC - SAS Packages Archive
dd158fc596 Merge pull request #43 from SASPAC/dev
The BasePlus package [ver. 2.0.1]
2024-07-24 08:14:52 +02:00
Bart Jablonski
8ceeeaadae The BasePlus package [ver. 2.0.1]
## The BasePlus package [ver. 2.0.1]

This release is dedicated to all dyslexics in the world.

### Changes:

New macros:
- [`%expandDataSetsList()`](https://github.com/SASPAC/baseplus/blob/2.0.0/baseplus.md#expanddatasetslist-macro) allowing to expand data set lists of the form: `a1-a3`, `b_:`, mixed, and `_all_`;
- [`%unifyVarsCaseSize()`](https://github.com/SASPAC/baseplus/blob/2.0.0/baseplus.md#unifyvarscasesize-macro) allowing to convert all variables in a list of datasets to all-low-case or all-upcase letters.

Both macros are result of recent discussions at `SAS-L` and `communities.sas.com`.

New format/informats:
- [`bpklength.`](https://github.com/SASPAC/baseplus/blob/2.0.0/baseplus.md#bpklength-format)
- [`bplength.`](https://github.com/SASPAC/baseplus/blob/2.0.0/baseplus.md#bplength-format)
- Bug fix in spelling (`lenght` vs `length`).

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

---

SHA256 digest for BasePlus: `F*FB102C9B12E870666C15A651017D48E0141E47D64C11437350D0EC75A7E9E609`

---

### Example 1. New macros.

~~~~sas
data a1 a2 a3 b_x b_y b_z;
  set sashelp.class(obs=1);
run;

%put #%expandDataSetsList(lib=work,datasets=a1-a3 b_:)#;

proc print data=a1;
proc print data=b_x;
run;

%unifyVarsCaseSize(work,a1-a3 b_:)

proc print data=a1;
proc print data=b_x;
run;
~~~~

### Example 2. New formats/informats:

~~~~sas
data _null_;
  x = input('żółw', bpklength.);
  y = input('żółw', bplength.);
  put x= y=;
run;
~~~~

~~~~log
x=4 y=7
~~~~
2024-07-24 08:10:07 +02:00
SASPAC - SAS Packages Archive
f6f520b0d0 Merge pull request #42 from SASPAC/dev
The BasePlus package [ver. 2.0.0]
2024-07-23 22:16:25 +02:00
Bart Jablonski
72595e978a The BasePlus package [ver. 2.0.0]
## The BasePlus package [ver. 2.0.0]

### Changes:

New macros:
- [`%expandDataSetsList()`](https://github.com/SASPAC/baseplus/blob/2.0.0/baseplus.md#expanddatasetslist-macro) allowing to expand data set lists of the form: `a1-a3`, `b_:`, mixed, and `_all_`;
- [`%unifyVarsCaseSize()`](https://github.com/SASPAC/baseplus/blob/2.0.0/baseplus.md#unifyvarscasesize-macro) allowing to convert all variables in a list of datasets to all-low-case or all-upcase letters.

Both macros are result of recent discussions at `SAS-L` and `communities.sas.com`.

New format/informats:
- [`bpklenght.`](https://github.com/SASPAC/baseplus/blob/2.0.0/baseplus.md#bpklenght-format)
- [`bplenght.`](https://github.com/SASPAC/baseplus/blob/2.0.0/baseplus.md#bplenght-format)

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

---

SHA256 digest for BasePlus: `F*0730DD793516E5C193842126A7EC9D339ADADD19F0F40B071F938CABDE4E66AD`

---

### Example 1. New macros.

~~~~sas
data a1 a2 a3 b_x b_y b_z;
  set sashelp.class(obs=1);
run;

%put #%expandDataSetsList(lib=work,datasets=a1-a3 b_:)#;

proc print data=a1;
proc print data=b_x;
run;

%unifyVarsCaseSize(work,a1-a3 b_:)

proc print data=a1;
proc print data=b_x;
run;
~~~~

### Example 2. New formats/informats:

~~~~sas
data _null_;
  x = input('żółw', bpklenght.);
  y = input('żółw', bplenght.);
  put x= y=;
run;
~~~~

~~~~log
x=4 y=7
~~~~
2024-07-23 22:15:11 +02:00
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
57 changed files with 44681 additions and 69 deletions

View File

@@ -51,10 +51,12 @@ libname NEW "%workPath()/new";
%put %date(yymmddn10.) %time(time5.) %datetime(e8601dt.);
%put %monthShift(2023,1,-5);
%put #%expandDataSetsList(lib=sashelp,datasets=_all_)#;
```
and more.
SHA256 digest for the latest version of `BasePlus`: F*BD0333B92D7CB639A136CD4994DE0C63F8396E449E45BC714D71D2E15318F42D
SHA256 digest for the latest version of `BasePlus`: F*FB102C9B12E870666C15A651017D48E0141E47D64C11437350D0EC75A7E9E609
[**Documentation for BasePlus**](./baseplus.md "Documentation for BasePlus")

View File

@@ -9,22 +9,22 @@
### Version information:
- Package: BasePlus
- Version: 1.40.0
- Generated: 2024-06-06T21:47:12
- Version: 2.0.1
- Generated: 2024-07-24T07:58:59
- Author(s): Bartosz Jablonski (yabwon@gmail.com), Quentin McMullen (qmcmullen@gmail.com)
- Maintainer(s): Bartosz Jablonski (yabwon@gmail.com)
- License: MIT
- File SHA256: `F*BD0333B92D7CB639A136CD4994DE0C63F8396E449E45BC714D71D2E15318F42D` for this version
- Content SHA256: `C*A35E716739EC4FF9767C363E840458FB7D5212605982276632F59FD26AB43594` for this version
- File SHA256: `F*FB102C9B12E870666C15A651017D48E0141E47D64C11437350D0EC75A7E9E609` for this version
- Content SHA256: `C*0444AC5B54150AE5424D335FF89A03D831F00F60898C99250CD59E0C5C5B0398` for this version
---
# The `BasePlus` package, version: `1.40.0`;
# The `BasePlus` package, version: `2.0.1`;
---
# The BasePlus package [ver. 1.40.0] <a name="baseplus-package"></a> ###############################################
# The BasePlus package [ver. 2.0.1] <a name="baseplus-package"></a> ###############################################
The **BasePlus** package implements useful
functions and functionalities I miss in the BASE SAS.
@@ -368,6 +368,25 @@ run;
%put &=y.;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 28** Converting variables names to lowercases:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
data a1 a2 a3 b_x b_y b_z;
set sashelp.class(obs=1);
run;
%put #%expandDataSetsList(lib=work,datasets=a1-a3 b_:)#;
proc print data=a1;
proc print data=b_x;
run;
%unifyVarsCaseSize(work,a1-a3 b_:)
proc print data=a1;
proc print data=b_x;
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
---
@@ -384,12 +403,13 @@ localization (only if additional content was deployed during the installation pr
--------------------------------------------------------------------
*SAS package generated by SAS Package Framework, version `20240529`*
*SAS package generated by SAS Package Framework, version `20240711`*
--------------------------------------------------------------------
# The `BasePlus` package content
The `BasePlus` package consists of the following content:
1. [`%bppipe()` macro ](#bppipe-macro-1 )
2. [`%deduplistc()` macro ](#deduplistc-macro-2 )
3. [`%deduplistp()` macro ](#deduplistp-macro-3 )
@@ -438,35 +458,42 @@ The `BasePlus` package consists of the following content:
46. [`deldataset()` function ](#deldataset-functions-46 )
47. [`semicolonc()` function ](#semicolonc-functions-47 )
48. [`semicolonn()` function ](#semicolonn-functions-48 )
49. [`$brackets.` format/informat ](#brackets-format-49 )
50. [`$semicolon.` format/informat ](#semicolon-format-50 )
51. [`qsortincbyprocproto()` proto ](#qsortincbyprocproto-proto-51 )
52. [`frommissingtonumberbs()` function ](#frommissingtonumberbs-functions-52 )
53. [`fromnumbertomissing()` function ](#fromnumbertomissing-functions-53 )
54. [`quicksort4notmiss()` function ](#quicksort4notmiss-functions-54 )
55. [`quicksorthash()` function ](#quicksorthash-functions-55 )
56. [`quicksorthashsddv()` function ](#quicksorthashsddv-functions-56 )
57. [`quicksortlight()` function ](#quicksortlight-functions-57 )
58. [`%date()` macro ](#date-macro-58 )
59. [`%datetime()` macro ](#datetime-macro-59 )
60. [`%downloadfilesto()` macro ](#downloadfilesto-macro-60 )
61. [`%filepath()` macro ](#filepath-macro-61 )
62. [`%finddswithvarval()` macro ](#finddswithvarval-macro-62 )
63. [`%fmt()` macro ](#fmt-macro-63 )
64. [`%gettitle()` macro ](#gettitle-macro-64 )
65. [`%iffunc()` macro ](#iffunc-macro-65 )
66. [`%infmt()` macro ](#infmt-macro-66 )
67. [`%letters()` macro ](#letters-macro-67 )
68. [`%libpath()` macro ](#libpath-macro-68 )
69. [`%minclude()` macro ](#minclude-macro-69 )
70. [`%monthshift()` macro ](#monthshift-macro-70 )
71. [`%replist()` macro ](#replist-macro-71 )
72. [`%time()` macro ](#time-macro-72 )
73. [`%today()` macro ](#today-macro-73 )
74. [`%translate()` macro ](#translate-macro-74 )
75. [`%tranwrd()` macro ](#tranwrd-macro-75 )
76. [`%workpath()` macro ](#workpath-macro-76 )
77. [License note](#license)
49. [`$bpklenght.` format/informat ](#bpklenght-formats-49 )
50. [`$bplenght.` format/informat ](#bplenght-formats-50 )
51. [`$brackets.` format/informat ](#brackets-formats-51 )
52. [`$semicolon.` format/informat ](#semicolon-formats-52 )
53. [`qsortincbyprocproto()` proto ](#qsortincbyprocproto-proto-53 )
54. [`frommissingtonumberbs()` function ](#frommissingtonumberbs-functions-54 )
55. [`fromnumbertomissing()` function ](#fromnumbertomissing-functions-55 )
56. [`quicksort4notmiss()` function ](#quicksort4notmiss-functions-56 )
57. [`quicksorthash()` function ](#quicksorthash-functions-57 )
58. [`quicksorthashsddv()` function ](#quicksorthashsddv-functions-58 )
59. [`quicksortlight()` function ](#quicksortlight-functions-59 )
60. [`%date()` macro ](#date-macro-60 )
61. [`%datetime()` macro ](#datetime-macro-61 )
62. [`%downloadfilesto()` macro ](#downloadfilesto-macro-62 )
63. [`%expanddatasetslist()` macro ](#expanddatasetslist-macro-63 )
64. [`%filepath()` macro ](#filepath-macro-64 )
65. [`%finddswithvarval()` macro ](#finddswithvarval-macro-65 )
66. [`%fmt()` macro ](#fmt-macro-66 )
67. [`%generateoneliners()` macro ](#generateoneliners-macro-67 )
68. [`%gettitle()` macro ](#gettitle-macro-68 )
69. [`%iffunc()` macro ](#iffunc-macro-69 )
70. [`%infmt()` macro ](#infmt-macro-70 )
71. [`%letters()` macro ](#letters-macro-71 )
72. [`%libpath()` macro ](#libpath-macro-72 )
73. [`%minclude()` macro ](#minclude-macro-73 )
74. [`%monthshift()` macro ](#monthshift-macro-74 )
75. [`%replist()` macro ](#replist-macro-75 )
76. [`%time()` macro ](#time-macro-76 )
77. [`%today()` macro ](#today-macro-77 )
78. [`%translate()` macro ](#translate-macro-78 )
79. [`%tranwrd()` macro ](#tranwrd-macro-79 )
80. [`%unifyvarscasesize()` macro ](#unifyvarscasesize-macro-80 )
81. [`%workpath()` macro ](#workpath-macro-81 )
82. [License note](#license)
---
@@ -975,6 +1002,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
<,varRange=>
<,quote=>
<,mcArray=>
<,ignoreCases>
)
~~~~~~~~~~~~~~~~~~~~~~~
@@ -987,7 +1015,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
a variables separator on the created list.
* `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_`,
a named range list of variables.
@@ -1008,6 +1036,8 @@ The basic syntax is the following, the `<...>` means optional parameters:
`%put %getVars(..., mcArray=XXX);` will result with
an Explicit & Radical Refuse Of Run (aka ERROR).
* `ignoreCases=` - *Optional*, default value is 1.
Indicates if search should be case insensitive.
### EXAMPLES AND USECASES: ####################################################
@@ -1874,7 +1904,8 @@ The basic syntax is the following, the `<...>` means optional parameters:
<,sep=>
<,pattern=>
<,varRange=>
<,quote=>
<,quote=>
<,ignoreCases=>
)
~~~~~~~~~~~~~~~~~~~~~~~
@@ -1895,6 +1926,9 @@ The basic syntax is the following, the `<...>` means optional parameters:
* `quote =` - *Optional*, default value is blank, a quotation
symbol to be used around values.
* `ignoreCases=` - *Optional*, default value is 1.
Indicates if search should be case insensitive.
### EXAMPLES AND USECASES: ####################################################
@@ -2018,6 +2052,9 @@ The basic syntax is the following, the `<...>` means optional parameters:
<,boxPlotSymbolSize=>
<,boxPlotLineSize=>
<,boxPlotFill=>
<,meanShiftLine=>
<,meanShiftStep=>
<,meanShiftColors=>
<,colorsList=>
<,monochrome=>
<,antialiasMax=>
@@ -2039,9 +2076,15 @@ The basic syntax is the following, the `<...>` means optional parameters:
<,catAxisValueAttrs=>
<,xaxisValueAttrs=>
<,xaxisTickstyle=>
<,xaxisValues=>
<,xaxisValuesDisplay=>
<,xaxisValuesFormat=>
<,xaxisValuesRotate=>
<,xaxisOther=>
<,sganno=>
<,odsGraphicsOptions=>
<,sgPlotOptions=>
<,vertical=>
<,VSCALE=>
<,KERNEL_K=>
@@ -2052,6 +2095,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
<,cleanTempData=>
<,codePreview=>
<,reuseN=>
)
~~~~~~~~~~~~~~~~~~~~~~~
@@ -2103,6 +2147,17 @@ The basic syntax is the following, the `<...>` means optional parameters:
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.
List of colours for plotting.
@@ -2134,7 +2189,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
For details see notes below.
* `xBothAxis` - *Optional*, default value is `1`.
Indicates if both (top and bootom) axis (horizontal) should be printed.
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`.
@@ -2183,11 +2238,34 @@ The basic syntax is the following, the `<...>` means optional parameters:
Allowed values are `OUTSIDE`, `INSIDE`, `ACROSS`, and `INBETWEEN`.
*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.
keeps name of a data set for the `sganno=` option
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.
* `odsGraphicsOptions` - *Optional*, default value is empty.
@@ -2243,6 +2321,11 @@ The basic syntax is the following, the `<...>` means optional parameters:
* `codePreview` - *Optional*, default value `0`.
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: ###################################################################
@@ -4436,7 +4519,129 @@ semicolonN(X)
---
## `$brackets.` format/informat <a name="brackets-format-49"></a> ######
## `$bpklenght.` format/informat <a name="bpklenght-formats-49"></a> ######
## >>> `bpklength` format/informat: <<< <a name="bpklength-format"></a> #######################
The **bpklength** format and informats uses the `klength()` function
to count the number of letters in a word. For empty string returns 0.
### EXAMPLES AND USECASES: ####################################################
**Example 1.** Informats and format:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
data work.count_letters;
input x $ 32.;
n = input (x, bpklength.);
c = input (x, $bpklength.);
format x $bpklength.;
cards;
ż
żó
żół
żółć
a
ab
abc
abcd
空手
空手道
1
12
123
1234
12345
123456
1234567
12345678
123456789
1234567890
;
run;
proc print data=work.count_letters;
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**Example 2.** Format:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
data _null_;
length x $ 32767;
do i = 32767/3 to 0 by -1111, 10 to 0 by -1;
x=repeat("空",i);
put x $bpklength.;
end;
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
---
## `$bplenght.` format/informat <a name="bplenght-formats-50"></a> ######
## >>> `bplength` format/informat: <<< <a name="bplength-format"></a> #######################
The **bplength** format and informats use the `lengthn()` function
to count the number of bytes in a word.
### EXAMPLES AND USECASES: ####################################################
**Example 1.** Informats and format:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
data work.count_bytes;
input x $ 32.;
n = input (x, bplength.);
c = input (x, $bplength.);
format x $bplength.;
cards;
ż
żó
żół
żółć
a
ab
abc
abcd
空手
空手道
1
12
123
1234
12345
123456
1234567
12345678
123456789
1234567890
;
run;
proc print data=work.count_bytes;
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**Example 2.** Format:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
data _null_;
length x $ 32767;
do i = 32767/3 to 0 by -1111, 10 to 0 by -1;
x=repeat("空",i);
put x $bplength.;
end;
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
---
## `$brackets.` format/informat <a name="brackets-formats-51"></a> ######
## >>> `brackets.` format: <<< <a name="brackets-format"></a> #######################
@@ -4467,7 +4672,7 @@ run;
---
## `$semicolon.` format/informat <a name="semicolon-format-50"></a> ######
## `$semicolon.` format/informat <a name="semicolon-formats-52"></a> ######
## >>> `semicolon.` format: <<< <a name="semicolon-format"></a> #######################
@@ -4491,7 +4696,7 @@ run;
---
## `qsortincbyprocproto()` proto <a name="qsortincbyprocproto-proto-51"></a> ######
## `qsortincbyprocproto()` proto <a name="qsortincbyprocproto-proto-53"></a> ######
## >>> `qsortInCbyProcProto()` proto function: <<< <a name="qsortincbyprocproto-proto-function"></a> #######################
@@ -4553,7 +4758,7 @@ Based on the code from the following pages [2020.08.14]:
---
## `frommissingtonumberbs()` function <a name="frommissingtonumberbs-functions-52"></a> ######
## `frommissingtonumberbs()` function <a name="frommissingtonumberbs-functions-54"></a> ######
## >>> `fromMissingToNumberBS()` function: <<< <a name="frommissingtonumberbs-function"></a> #######################
@@ -4606,7 +4811,7 @@ fromMissingToNumberBS(x)
---
## `fromnumbertomissing()` function <a name="fromnumbertomissing-functions-53"></a> ######
## `fromnumbertomissing()` function <a name="fromnumbertomissing-functions-55"></a> ######
## >>> `fromNumberToMissing()` function: <<< <a name="fromnumbertomissing-function"></a> #######################
@@ -4658,7 +4863,7 @@ fromNumberToMissing(x)
---
## `quicksort4notmiss()` function <a name="quicksort4notmiss-functions-54"></a> ######
## `quicksort4notmiss()` function <a name="quicksort4notmiss-functions-56"></a> ######
## >>> `quickSort4NotMiss()` subroutine: <<< <a name="quicksort4notmiss-subroutine"></a> #######################
@@ -4752,7 +4957,7 @@ call quickSort4NotMiss(A)
---
## `quicksorthash()` function <a name="quicksorthash-functions-55"></a> ######
## `quicksorthash()` function <a name="quicksorthash-functions-57"></a> ######
## >>> `quickSortHash()` subroutine: <<< <a name="quicksorthash-subroutine"></a> #######################
@@ -4993,7 +5198,7 @@ call quickSortHash(A)
---
## `quicksorthashsddv()` function <a name="quicksorthashsddv-functions-56"></a> ######
## `quicksorthashsddv()` function <a name="quicksorthashsddv-functions-58"></a> ######
## >>> `quickSortHashSDDV()` subroutine: <<< <a name="quicksorthashsddv-subroutine"></a> #######################
@@ -5124,7 +5329,7 @@ call quickSortHashSDDV(A, SDDV)
---
## `quicksortlight()` function <a name="quicksortlight-functions-57"></a> ######
## `quicksortlight()` function <a name="quicksortlight-functions-59"></a> ######
## >>> `quickSortLight()` subroutine: <<< <a name="quicksortlight-subroutine"></a> #######################
@@ -5333,7 +5538,7 @@ call quickSortLight(A)
---
## `%date()` macro <a name="date-macro-58"></a> ######
## `%date()` macro <a name="date-macro-60"></a> ######
## >>> `%date()` macro: <<< <a name="date-macro"></a> #######################
@@ -5376,7 +5581,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
---
## `%datetime()` macro <a name="datetime-macro-59"></a> ######
## `%datetime()` macro <a name="datetime-macro-61"></a> ######
## >>> `%datetime()` macro: <<< <a name="datetime-macro"></a> #######################
@@ -5433,7 +5638,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
---
## `%downloadfilesto()` macro <a name="downloadfilesto-macro-60"></a> ######
## `%downloadfilesto()` macro <a name="downloadfilesto-macro-62"></a> ######
## >>> `%downloadFilesTo()` macro: <<< <a name="downloadfilesto-macro"></a> #######################
@@ -5565,7 +5770,111 @@ run;
---
## `%filepath()` macro <a name="filepath-macro-61"></a> ######
## `%expanddatasetslist()` macro <a name="expanddatasetslist-macro-63"></a> ######
## >>> `%expandDataSetsList()` macro: <<< <a name="expanddatasetslist-macro"></a> #######################
The `%expandDataSetsList()` macro is dedicated to "lazy typers".
It allows to expand data set names provides in form of a SAS list for a given library.
See examples below for the details.
The `%expandDataSetsList()` macro works as pure macro code.
### SYNTAX: ###################################################################
The basic syntax is the following, the `<...>` means optional parameters:
~~~~~~~~~~~~~~~~~~~~~~~sas
%expandDataSetsList(
lib
,datasets
<,quote=>
<,views=>
)
~~~~~~~~~~~~~~~~~~~~~~~
**Arguments description**:
1. `lib` - *Required*, is a name of a library
where data sets are looked-up.
2. `datasets` - *Required*, is a list of data sets or views
to be expanded. Can be named list (e.g. `x_:`),
can be enumerated list (e.g. `y_1-y_5`), or both.
Also the `_ALL_` value is accepted.
*. `quote` - *Optional*, binary indicator (default `0` means "no").
Tells if data set names should be quoted.
*. `views` - *Optional*, binary indicator (default `1` means "yes").
Tells if views names should be listed too.
---
### EXAMPLES AND USECASES: ####################################################
**EXAMPLE 0.** Create data sets for tests:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
data x_a x_b x_c x_d x_e x_f;
x=17;
run;
data y1 y2 y3 y4 y9 y10 y11 y12;
y=42;
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 1.** Display names of listed datasets, handle not existing too:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%PUT #%expandDataSetsList(lib=work,datasets=x_: y1-y4 y9)#;
%PUT #%expandDataSetsList(lib=work,datasets=x_: y1-y4 notExist_1-notExist_10)#;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 2.** Display one and all datasets from `WORK`, names quoted:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%PUT %expandDataSetsList(lib=work,datasets=_ALL_, quote=1);
%PUT %expandDataSetsList(lib=work,datasets=x_a, quote=1);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 3.** In tandem with the `resolve()` function:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
data _null_;
test=resolve('%expandDataSetsList(lib=work,datasets=x_:, quote=1)');
put test / test hex72.;
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 4.** Workaround for `proc delete` not working with colon operator,
observe a warning info for `x_:` list:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
proc delete lib=work data=%expandDataSetsList(lib=work,datasets=x_:)
;
run;
%PUT #%expandDataSetsList(lib=work,datasets=x_: y1-y4 y9)#;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 5.** Including and excluding views:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%PUT %expandDataSetsList(lib=sashelp,datasets=_ALL_);
%PUT %expandDataSetsList(lib=sashelp,datasets=_ALL_,views=0);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
---
## `%filepath()` macro <a name="filepath-macro-64"></a> ######
## >>> `%filePath()` macro: <<< <a name="filepath-macro"></a> #######################
@@ -5605,7 +5914,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
---
## `%finddswithvarval()` macro <a name="finddswithvarval-macro-62"></a> ######
## `%finddswithvarval()` macro <a name="finddswithvarval-macro-65"></a> ######
## >>> `%findDSwithVarVal()` macro: <<< <a name="finddswithvarval-macro"></a> #######################
@@ -5733,7 +6042,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
---
## `%fmt()` macro <a name="fmt-macro-63"></a> ######
## `%fmt()` macro <a name="fmt-macro-66"></a> ######
## >>> `%fmt()` macro: <<< <a name="fmt-macro"></a> #######################
@@ -5802,7 +6111,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-67"></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-68"></a> ######
## >>> `%getTitle()` macro: <<< <a name="gettitle-macro"></a> #######################
@@ -5888,7 +6315,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-69"></a> ######
## >>> `%iffunc()` macro: <<< <a name="iffunc-macro"></a> #######################
@@ -6089,7 +6516,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-70"></a> ######
## >>> `%infmt()` macro: <<< <a name="infmt-macro"></a> #######################
@@ -6146,7 +6573,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-71"></a> ######
## >>> `%letters()` macro: <<< <a name="letters-macro"></a> #######################
@@ -6264,7 +6691,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-72"></a> ######
## >>> `%libPath()` macro: <<< <a name="libpath-macro"></a> #######################
@@ -6309,7 +6736,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-73"></a> ######
## >>> `%mInclude()` macro: <<< <a name="minclude-macro"></a> #######################
@@ -6522,7 +6949,7 @@ quit;
---
## `%monthshift()` macro <a name="monthshift-macro-70"></a> ######
## `%monthshift()` macro <a name="monthshift-macro-74"></a> ######
## >>> `%monthShift()` macro: <<< <a name="monthshift-macro"></a> #######################
@@ -6671,7 +7098,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-75"></a> ######
## >>> `%repList()` macro: <<< <a name="replist-macro"></a> #######################
@@ -6787,7 +7214,7 @@ run;
---
## `%time()` macro <a name="time-macro-72"></a> ######
## `%time()` macro <a name="time-macro-76"></a> ######
## >>> `%time()` macro: <<< <a name="time-macro"></a> #######################
@@ -6830,7 +7257,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-77"></a> ######
## >>> `%today()` macro: <<< <a name="today-macro"></a> #######################
@@ -6873,7 +7300,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-78"></a> ######
## >>> `%translate()` macro: <<< <a name="translate-macro"></a> #######################
@@ -6937,7 +7364,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-79"></a> ######
## >>> `%tranwrd()` macro: <<< <a name="tranwrd-macro"></a> #######################
@@ -7004,7 +7431,118 @@ The basic syntax is the following, the `<...>` means optional parameters:
---
## `%workpath()` macro <a name="workpath-macro-76"></a> ######
## `%unifyvarscasesize()` macro <a name="unifyvarscasesize-macro-80"></a> ######
## >>> `%unifyVarsCaseSize()` macro: <<< <a name="unifyvarscasesize-macro"></a> #######################
The `%unifyVarsCaseSize()` macro converts *all* variables names into low-case or
upcase letters for given library and list of datasets. Only necessary conversion is
done, i.e., variable `abc` will not be converted to low-case letters.
See examples below for the details.
The `%unifyVarsCaseSize()` macro works as pure macro code.
[NOTE:] The macro internally uses the `%expandDataSetsList()` macro.
### SYNTAX: ###################################################################
The basic syntax is the following, the `<...>` means optional parameters:
~~~~~~~~~~~~~~~~~~~~~~~sas
%unifyVarsCaseSize(
lib
,ds
<,case=>
<,debug=>
)
~~~~~~~~~~~~~~~~~~~~~~~
**Arguments description**:
1. `lib` - *Required*, is a name of a library
where data sets are looked-up.
2. `ds` - *Required*, is a list of data sets
to be expanded. Can be named list (e.g. `x_:`),
can be enumerated list (e.g. `y_1-y_5`), or both.
Also the `_ALL_` value is accepted.
*. `case` - *Optional*, single letter indicator (default `L` means "low-case").
Tells if variables names should low-cased (`l`,`L`) or upcased ("u", "U").
*. `debug` - *Optional*, binary indicator (default `0` means "no").
Tells if processing notes should be printed.
---
### EXAMPLES AND USECASES: ####################################################
**EXAMPLE 0.** Create data sets for tests:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
data aclass1 aclass2 aclass3 bclass4 bclass5 bclass6;
set sashelp.class(obs=6);
Nn=_N_;
if 1=_N_ then output aclass1;
if 2=_N_ then output aclass2;
if 3=_N_ then output aclass3;
if 4=_N_ then output bclass4;
if 5=_N_ then output bclass5;
if 6=_N_ then output bclass6;
run;
proc print data=aclass1;
run;
proc print data=bclass6;
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 1.** Convert all variables names to low-case:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%unifyVarsCaseSize(work,aclass:)
proc print data=aclass1;
proc print data=aclass2;
proc print data=aclass3;
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 2.** Convert all variables names to upcase:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%unifyVarsCaseSize(work,bclass4-bclass6,case=U)
proc print data=bclass4;
proc print data=bclass5;
proc print data=bclass6;
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 3.** No conversion done:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
data work.abc;
abc=42;
run;
%unifyVarsCaseSize(work,abc,debug=1)
proc print data=abc;
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 4.** Variables in all data sets in `WORK` converted to upcase:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%unifyVarsCaseSize(work,_ALL_,case=L)
%unifyVarsCaseSize(work,_ALL_,case=U)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
---
## `%workpath()` macro <a name="workpath-macro-81"></a> ######
## >>> `%workPath()` macro: <<< <a name="workpath-macro"></a> #######################

Binary file not shown.

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

7609
hist/2.0.0/baseplus.md Normal file

File diff suppressed because it is too large Load Diff

BIN
hist/2.0.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

7609
hist/2.0.1/baseplus.md Normal file

File diff suppressed because it is too large Load Diff

BIN
hist/2.0.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