mirror of
https://github.com/yabwon/SAS_PACKAGES.git
synced 2025-12-11 11:14:35 +00:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b76b1ed9eb | ||
|
|
942879a5b8 | ||
|
|
fe631f9e44 | ||
|
|
3f380b4e64 | ||
|
|
02de8f0bc0 |
12
README.md
12
README.md
@@ -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.1\] 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: 319109732B5CBD99ADDA6D48EA26DA5236622F9C5D332F94EF282F1C9DCE73F9
|
||||
|
||||
[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")
|
||||
|
||||
|
||||
@@ -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.1\] 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: 319109732B5CBD99ADDA6D48EA26DA5236622F9C5D332F94EF282F1C9DCE73F9
|
||||
|
||||
[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")
|
||||
|
||||
|
||||
@@ -1,3 +1,20 @@
|
||||
/* 20211114 */
|
||||
BasePlus: 319109732B5CBD99ADDA6D48EA26DA5236622F9C5D332F94EF282F1C9DCE73F9
|
||||
|
||||
/* 20211113 */
|
||||
BasePlus: 4EDB786B9D6F6D6C5741B5CAC1CB169DD10D8196600B2CB385DDE479A54F0FA3
|
||||
|
||||
/* 20211112 */
|
||||
GSM: F6EE77A3C042E1E083E970BE255D126B52A75205DC1FB9A4A7337D0A89EEC7EB
|
||||
|
||||
/* 20211111 */
|
||||
BasePlus: B34E352EC52E05B8BBE1816E6104F47677CBFDEAF7CD71B8BF04FDBFA01B0EF0
|
||||
DFA: C32A81304A411C1EB6BA7B76EDB8D70550F3935F35A1506E2B8019A2036FB5FF
|
||||
dynMacroArray: 9FE227EF3144431B51063D599148BDD8873509D1B32F1AC2979EC566E1BB1487
|
||||
GSM: BEFAA87266D6DBA3D5983117FC36A24DE03A2F93791AC786DCDB37571A4494AC
|
||||
macroArray: 70032D27081A0EE15BC82B8F14D2A61700FA7C1F0D88B4DB516AB433CD06C4D3
|
||||
SQLinDS: F2BE3CC68C9A34DD324FD35C8287A4F89737E2E28E806E0DD7FB0EBF60F7C569
|
||||
|
||||
/* 20211105 */
|
||||
GSM: 3EAF6E93642CCA9B5B592DF9BED4C8B20B60BCD4B0434720D12D26096717C4A9
|
||||
|
||||
|
||||
@@ -43,13 +43,14 @@
|
||||
* [`%QzipEvalf()` macro](#qzipevalf-macro)
|
||||
* [`%functionExists()` macro](#functionexists-macro)
|
||||
* [`%RainCloudPlot()` macro](#raincloudplot-macro)
|
||||
|
||||
|
||||
* [`%zipLibrary()` macro](#ziplibrary-macro)
|
||||
* [`%unzipLibrary()` macro](#unziplibrary-macro)
|
||||
|
||||
* [License](#license)
|
||||
|
||||
---
|
||||
|
||||
# The BasePlus package [ver. 0.994] <a name="baseplus-package"></a> ###############################################
|
||||
# The BasePlus package [ver. 1.1] <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,15 @@ Kudos to all who inspired me to generate this package:
|
||||
|
||||

|
||||
|
||||
**Example 10**: Zip SAS library.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
%zipLibrary(sashelp, libOut=work)
|
||||
|
||||
%unzipLibrary(%sysfunc(pathname(work)), zip=sashelp, mode=S, clean=1)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
@@ -202,44 +213,46 @@ Package contains:
|
||||
9. macro qzipevalf
|
||||
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
|
||||
12. macro unziplibrary
|
||||
13. macro zipevalf
|
||||
14. macro ziplibrary
|
||||
15. format bool
|
||||
16. format boolz
|
||||
17. format ceil
|
||||
18. format floor
|
||||
19. format int
|
||||
20. functions arrfill
|
||||
21. functions arrfillc
|
||||
22. functions arrmissfill
|
||||
23. functions arrmissfillc
|
||||
24. functions arrmisstoleft
|
||||
25. functions arrmisstoleftc
|
||||
26. functions arrmisstoright
|
||||
27. functions arrmisstorightc
|
||||
28. functions bracketsc
|
||||
29. functions bracketsn
|
||||
30. functions catxfc
|
||||
31. functions catxfi
|
||||
32. functions catxfj
|
||||
33. functions catxfn
|
||||
34. functions deldataset
|
||||
35. functions semicolonc
|
||||
36. functions semicolonn
|
||||
37. format brackets
|
||||
38. format semicolon
|
||||
39. proto qsortincbyprocproto
|
||||
40. functions frommissingtonumberbs
|
||||
41. functions fromnumbertomissing
|
||||
42. functions quicksort4notmiss
|
||||
43. functions quicksorthash
|
||||
|
||||
|
||||
|
||||
|
||||
*SAS package generated by generatePackage, version 20211111*
|
||||
|
||||
The SHA256 hash digest for package BasePlus:
|
||||
`B34E352EC52E05B8BBE1816E6104F47677CBFDEAF7CD71B8BF04FDBFA01B0EF0`
|
||||
`319109732B5CBD99ADDA6D48EA26DA5236622F9C5D332F94EF282F1C9DCE73F9`
|
||||
|
||||
---
|
||||
# Content description ############################################################################################
|
||||
@@ -3254,6 +3267,233 @@ The output:
|
||||

|
||||
|
||||
|
||||
---
|
||||
|
||||
## >>> `%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=>
|
||||
<,compression=>
|
||||
)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
**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.
|
||||
|
||||
* `compression =` - *Optional*, default value is `6`,
|
||||
specifies the compression level
|
||||
`0` to `9`, where `0` is no compression
|
||||
and `9` is maximum compression.
|
||||
|
||||
### 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
|
||||
with maximum compression level
|
||||
into different location in one zip file
|
||||
and delete source files:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
%zipLibrary(test3, clean=1, libOut=test4, compression=9)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
---
|
||||
|
||||
## >>> `%unzipLibrary()` macro: <<< <a name="unziplibrary-macro"></a> #######################
|
||||
|
||||
The unzipLibrary() macro allows to unzip content of a SAS library.
|
||||
It is a *counterpart* to the `%zipLibrary()` macro and is *not* intended to work
|
||||
with zip files generated by other software (though it may in some cases).
|
||||
|
||||
Files can be unzipped from a single file
|
||||
or from multiple files (named e.g. "dataset.sas7bdat.zip").
|
||||
If a file is indexed also the index file is unzipped.
|
||||
|
||||
Source files can be deleted after decompression.
|
||||
|
||||
Status of decompression and processing time is reported.
|
||||
|
||||
See examples below for the details.
|
||||
|
||||
### SYNTAX: ###################################################################
|
||||
|
||||
The basic syntax is the following, the `<...>` means optional parameters:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
%unzipLibrary(
|
||||
path
|
||||
<,zip=>
|
||||
<,mode=>
|
||||
<,clean=>
|
||||
<,libOut=>
|
||||
)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
**Arguments description**:
|
||||
|
||||
1. `path` - *Required*, a path pointing to zipped file(s) location.
|
||||
|
||||
* `zip =` - *Optional*, When `mode=S` a name of the
|
||||
zip file containing SAS files to be unzipped.
|
||||
|
||||
* `mode = S` - *Optional*, default value is `S`,
|
||||
indicates mode of decompression
|
||||
read from a single zip file (`SINGLE/S`)
|
||||
or from multiple files (`MULTI/M`)
|
||||
|
||||
* `clean = 0` - *Optional*, default value is `0`,
|
||||
should zip files be deleted after unzipping?
|
||||
`1` means *yes*, `0` means *no*.
|
||||
|
||||
* `libOut =` - *Optional*, default value is empty,
|
||||
output library for a single zip file
|
||||
decompression.
|
||||
|
||||
### 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.** Use data from Example 1.
|
||||
First zip content of the `test3` library
|
||||
to `test4` location into one zip file
|
||||
and delete source files.
|
||||
Next unzip `test3.zip` library into the
|
||||
`test4` location and delete the zip file.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
%zipLibrary(test3, clean=1, libOut=test4)
|
||||
|
||||
|
||||
%unzipLibrary(%sysfunc(pathname(test4)), zip=test3, clean=1)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
**EXAMPLE 3.** Use data from Example 1.
|
||||
First zip content of the `test1` library
|
||||
into multiple zip files and delete source files.
|
||||
Next unzip `*.zip` files in `test1`
|
||||
location and delete zipped files
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
%zipLibrary(test1, mode=M, clean=1)
|
||||
|
||||
|
||||
%unzipLibrary(%sysfunc(pathname(test1)), mode=M, clean=1)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
**EXAMPLE 4.** First zip content of the `sashelp` library
|
||||
into `work` library.
|
||||
Next unzip `sashelp.zip` file in `work`
|
||||
location and delete zip file.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||
%zipLibrary(sashelp, mode=S, clean=0, libOut=work)
|
||||
|
||||
|
||||
%unzipLibrary(%sysfunc(pathname(work)), zip=sashelp, mode=S, clean=1)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
---
|
||||
|
||||
## License ####################################################################
|
||||
|
||||
Binary file not shown.
@@ -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.
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
BIN
packages/gsm.zip
BIN
packages/gsm.zip
Binary file not shown.
Reference in New Issue
Block a user