Compare commits

...

4 Commits

Author SHA1 Message Date
yabwon
942879a5b8 Package BasePlus, version 1.0
Package BasePlus, version 1.0:

-New macro `%zipLibrary()` added.
-The doc. updated.
2021-11-13 22:51:01 +01:00
yabwon
fe631f9e44 Package GSM, version 0.17
Package GSM, version 0.17:

-New parameter `secret` added.
-The doc. updated.
2021-11-12 13:56:17 +01:00
yabwon
3f380b4e64 Package GSM, version 0.16
Package GSM, version 0.16:

-Check for the `SECURE` keyword added.
-Example in the doc. updated.
2021-11-12 11:43:12 +01:00
yabwon
02de8f0bc0 Package GSM, version 0.16
Package GSM, version 0.16:

-Check for the `SECURE` keyword added.
-Example in the doc. updated.
2021-11-12 11:11:39 +01:00
7 changed files with 194 additions and 48 deletions

View File

@@ -146,7 +146,7 @@ SHA256 digest for macroArray: 9FE227EF3144431B51063D599148BDD8873509D1B32F1AC297
[Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/macroarray.md "Documentation for macroArray")
- **BasePlus**\[0.994\] adds a bunch of functionalities I am missing in BASE SAS, such as:
- **BasePlus**\[1.0\] adds a bunch of functionalities I am missing in BASE SAS, such as:
```sas
call arrMissToRight(myArray);
call arrFillMiss(17, myArray);
@@ -159,17 +159,21 @@ string = catXFn("date9.", "#", myArray);
format x bool.;
%put %getVars(sashelp.class, pattern = ght$, sep = +, varRange = _numeric_);
%rainCloudPlot(sashelp.cars,DriveTrain,Invoice)
%zipLibrary(sashelp,libOut=work)
```
SHA256 digest for BasePlus: B34E352EC52E05B8BBE1816E6104F47677CBFDEAF7CD71B8BF04FDBFA01B0EF0
SHA256 digest for BasePlus: 4EDB786B9D6F6D6C5741B5CAC1CB169DD10D8196600B2CB385DDE479A54F0FA3
[Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md "Documentation for BasePlus")
- **GSM** (Generate Secure Macros)\[0.14\], package allows
- **GSM** (Generate Secure Macros)\[0.17\], package allows
to create secured macros stored in SAS Proc FCMP functions.
The dataset with functions can be shared between different operating systems
and allows to generate macros on site without showing their code.
SHA256 digest for GSM: BEFAA87266D6DBA3D5983117FC36A24DE03A2F93791AC786DCDB37571A4494AC
SHA256 digest for GSM: F6EE77A3C042E1E083E970BE255D126B52A75205DC1FB9A4A7337D0A89EEC7EB
[Documentation for GSM](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/gsm.md "Documentation for GSM")

View File

@@ -90,7 +90,7 @@ SHA256 digest for macroArray: 70032D27081A0EE15BC82B8F14D2A61700FA7C1F0D88B4DB51
---
- **BasePlus**\[0.994\] adds a bunch of functionalities I am missing in BASE SAS, such as:
- **BasePlus**\[1.0\] adds a bunch of functionalities I am missing in BASE SAS, such as:
```sas
call arrMissToRight(myArray);
call arrFillMiss(17, myArray);
@@ -103,19 +103,23 @@ string = catXFn("date9.", "#", myArray);
format x bool.;
%put %getVars(sashelp.class, pattern = ght$, sep = +, varRange = _numeric_);
%rainCloudPlot(sashelp.cars,DriveTrain,Invoice)
%zipLibrary(sashelp,libOut=work)
```
SHA256 digest for BasePlus: B34E352EC52E05B8BBE1816E6104F47677CBFDEAF7CD71B8BF04FDBFA01B0EF0
SHA256 digest for BasePlus: 4EDB786B9D6F6D6C5741B5CAC1CB169DD10D8196600B2CB385DDE479A54F0FA3
[Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md "Documentation for BasePlus")
---
- **GSM** (Generate Secure Macros)\[0.14\], package allows
- **GSM** (Generate Secure Macros)\[0.17\], package allows
to create secured macros stored in SAS Proc FCMP functions.
The dataset with functions can be shared between different operating systems
and allows to generate macros on site without showing their code.
SHA256 digest for GSM: BEFAA87266D6DBA3D5983117FC36A24DE03A2F93791AC786DCDB37571A4494AC
SHA256 digest for GSM: F6EE77A3C042E1E083E970BE255D126B52A75205DC1FB9A4A7337D0A89EEC7EB
[Documentation for GSM](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/gsm.md "Documentation for GSM")

View File

@@ -1,3 +1,17 @@
/* 20211113 */
BasePlus: 4EDB786B9D6F6D6C5741B5CAC1CB169DD10D8196600B2CB385DDE479A54F0FA3
/* 20211112 */
GSM: F6EE77A3C042E1E083E970BE255D126B52A75205DC1FB9A4A7337D0A89EEC7EB
/* 20211111 */
BasePlus: B34E352EC52E05B8BBE1816E6104F47677CBFDEAF7CD71B8BF04FDBFA01B0EF0
DFA: C32A81304A411C1EB6BA7B76EDB8D70550F3935F35A1506E2B8019A2036FB5FF
dynMacroArray: 9FE227EF3144431B51063D599148BDD8873509D1B32F1AC2979EC566E1BB1487
GSM: BEFAA87266D6DBA3D5983117FC36A24DE03A2F93791AC786DCDB37571A4494AC
macroArray: 70032D27081A0EE15BC82B8F14D2A61700FA7C1F0D88B4DB516AB433CD06C4D3
SQLinDS: F2BE3CC68C9A34DD324FD35C8287A4F89737E2E28E806E0DD7FB0EBF60F7C569
/* 20211105 */
GSM: 3EAF6E93642CCA9B5B592DF9BED4C8B20B60BCD4B0434720D12D26096717C4A9

View File

@@ -43,13 +43,14 @@
* [`%QzipEvalf()` macro](#qzipevalf-macro)
* [`%functionExists()` macro](#functionexists-macro)
* [`%RainCloudPlot()` macro](#raincloudplot-macro)
* [`%zipLibrary()` macro](#ziplibrary-macro)
* [License](#license)
---
# The BasePlus package [ver. 0.994] <a name="baseplus-package"></a> ###############################################
# The BasePlus package [ver. 1.0] <a name="baseplus-package"></a> ###############################################
The **BasePlus** package implements useful
functions and functionalities I miss in the BASE SAS.
@@ -65,7 +66,8 @@ Kudos to all who inspired me to generate this package:
*Paul Dorfman*,
*Richard DeVenezia*,
*Christian Graffeuille*,
*Allan Bowe*.
*Allan Bowe*,
*Anamaria Calai*.
---
@@ -168,7 +170,7 @@ Kudos to all who inspired me to generate this package:
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**Example 7**: Deduplicate values from a space separated list.
**Example 7**: De-duplicate values from a space separated list.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%let list = 4 5 6 1 2 3 1 2 3 4 5 6;
%put *%dedupListS(&list.)*;
@@ -187,6 +189,13 @@ Kudos to all who inspired me to generate this package:
![Rain Cloud Plot](./baseplus_RainCloudPlot_Ex0_9.png)
**Example 10**: Zip SAS library.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%zipLibrary(sashelp,libOut=work)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
@@ -203,43 +212,45 @@ Package contains:
10. macro raincloudplot
11. macro symdelglobal
12. macro zipevalf
13. format bool
14. format boolz
15. format ceil
16. format floor
17. format int
18. functions arrfill
19. functions arrfillc
20. functions arrmissfill
21. functions arrmissfillc
22. functions arrmisstoleft
23. functions arrmisstoleftc
24. functions arrmisstoright
25. functions arrmisstorightc
26. functions bracketsc
27. functions bracketsn
28. functions catxfc
29. functions catxfi
30. functions catxfj
31. functions catxfn
32. functions deldataset
33. functions semicolonc
34. functions semicolonn
35. format brackets
36. format semicolon
37. proto qsortincbyprocproto
38. functions frommissingtonumberbs
39. functions fromnumbertomissing
40. functions quicksort4notmiss
41. functions quicksorthash
42. functions quicksorthashsddv
43. functions quicksortlight
13. macro ziplibrary
14. format bool
15. format boolz
16. format ceil
17. format floor
18. format int
19. functions arrfill
20. functions arrfillc
21. functions arrmissfill
22. functions arrmissfillc
23. functions arrmisstoleft
24. functions arrmisstoleftc
25. functions arrmisstoright
26. functions arrmisstorightc
27. functions bracketsc
28. functions bracketsn
29. functions catxfc
30. functions catxfi
31. functions catxfj
32. functions catxfn
33. functions deldataset
34. functions semicolonc
35. functions semicolonn
36. format brackets
37. format semicolon
38. proto qsortincbyprocproto
39. functions frommissingtonumberbs
40. functions fromnumbertomissing
41. functions quicksort4notmiss
42. functions quicksorthash
43. functions quicksorthashsddv
44. functions quicksortlight
*SAS package generated by generatePackage, version 20211111*
The SHA256 hash digest for package BasePlus:
`B34E352EC52E05B8BBE1816E6104F47677CBFDEAF7CD71B8BF04FDBFA01B0EF0`
`4EDB786B9D6F6D6C5741B5CAC1CB169DD10D8196600B2CB385DDE479A54F0FA3`
---
# Content description ############################################################################################
@@ -3254,6 +3265,105 @@ The output:
![Example 2b](./baseplus_RainCloudPlot_Ex2b.png)
---
## >>> `%zipLibrary()` macro: <<< <a name="ziplibrary-macro"></a> #######################
The zipLibrary() macro allows to zip content of a SAS library.
Files can be zipped into a single file (named as the input library)
or into multiple files (named as "dataset.sas7bdat.zip").
If a file is indexed also the index file is zipped.
Source files can be deleted after compression.
Status of compression and processing time is reported.
See examples below for the details.
### SYNTAX: ###################################################################
The basic syntax is the following, the `<...>` means optional parameters:
~~~~~~~~~~~~~~~~~~~~~~~sas
%zipLibrary(
lib
<,mode=>
<,clean=>
<,libOut=>
)
~~~~~~~~~~~~~~~~~~~~~~~
**Arguments description**:
1. `lib` - *Required*, a name of the library to be zipped.
Must be a valid SAS V7, V8, or V9 library.
* `mode = S` - *Optional*, default value is `S`,
indicates mode of compression
generates single zip file (`SINGLE/S`)
or multiple files (`MULTI/M`)
* `clean = 0` - *Optional*, default value is 0,
should datasets be deleted after zipping?
`1` means *yes*, `0` means *no*.
* `libOut =` - *Optional*, default value is empty,
output library for a single zip file.
### EXAMPLES AND USECASES: ####################################################
**EXAMPLE 1.** Generate data:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
options dlcreatedir;
libname test1 "%sysfunc(pathname(work))/test1";
libname test2 "%sysfunc(pathname(work))/test2";
libname test3 (test1 test2);
libname test4 "%sysfunc(pathname(work))/test4";
options nodlcreatedir;
%put %sysfunc(pathname(test3));
%put %sysfunc(pathname(test4));
data
test1.A(index=(model))
test1.B
test2.C
test2.D(index=(model make io=(invoice origin)))
;
set sashelp.cars;
run;
data test1.B2 / view=test1.B2;
set test1.B;
output;
output;
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 2.** Zip content of test3 library
into the same location in one zip file:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%zipLibrary(test3)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 3.** Zip content of test3 library
into the same location in multiple zip files:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%zipLibrary(test3, mode=MULTI)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 4.** Zip content of test3 library
into different location in one zip file
and delete source files:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%zipLibrary(test3, clean=1, libOut=test4)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
## License ####################################################################

Binary file not shown.

View File

@@ -8,7 +8,7 @@
---
# The GSM package [ver. 0.15] <a name="gsm-package"></a> ###############################################
# The GSM package [ver. 0.17] <a name="gsm-package"></a> ###############################################
The **GSM** (a.k.a. *Generate Secure Macros*) package allows
to create secured macros stored in SAS Proc FCMP functions.
@@ -67,8 +67,8 @@ Required SAS Components:
* SAS package generated by generatePackage, version 20211111 *
The SHA256 hash digest for package BasePlus:
`BEFAA87266D6DBA3D5983117FC36A24DE03A2F93791AC786DCDB37571A4494AC`
The SHA256 hash digest for package GSM:
`F6EE77A3C042E1E083E970BE255D126B52A75205DC1FB9A4A7337D0A89EEC7EB`
## >>> `%GSM()` macro: <<< <a name="gsm-macro"></a> #######################
@@ -115,6 +115,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
<,source2=>
<,outpath=>
<,encodingRestricted=>
<,secret=>
)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -142,6 +143,13 @@ The basic syntax is the following, the `<...>` means optional parameters:
encoding of the session which generates the dataset then
the generateMacros() function will not execute macro code.
* `secret=` - *Optional*, the default value is null, in such case the
secret is generated from the `sha256(datetime(), hex32.)` function
and is printed in the log. When not null then should be
alphanumerical constant. Non-alphanumerical characters are removed.
Required to execute the `resolve()` function.
User who do not know the value will not be able
to run the `_maxro_XX_()` function.
---
@@ -179,7 +187,7 @@ data _null_;
cards4;
%macro xyz(x) / SECURE;
%do i = 1 %to &x.;
%put &i=;
%put &=i;
%end;
%mend;
;;;;
@@ -214,6 +222,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
<,outlib=work.generateMacros.secure>
<,source2=>
<,fileNameCode=FNC>
<,secret=123456789>
)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -238,6 +247,11 @@ The basic syntax is the following, the `<...>` means optional parameters:
* `fileNameCode=` - *Optional*, the default value is `FNC`.
Internal fileref.
* `secret=` - *Optional*, internal, the default value is `1234567890`.
Alphanumerical constant required to execute the `resolve()`
function. User who do not know the value will not be able
to run the `_maxro_XX_()` function.
---

Binary file not shown.