mirror of
https://github.com/yabwon/SAS_PACKAGES.git
synced 2026-01-05 06:10:05 +00:00
The macroArray package [ver. 1.1.0]
The macroArray package [ver. 1.1.0] New parameter in the `%array()` macro: * `q=` - *Optional*, indicates (when set to `1`) if the value be surrounded by quotes. It uses `quote(cats(...))` combo under the hood. Default value is `0`. Ignored for `macarray=M`.
This commit is contained in:
@@ -61,7 +61,7 @@ SHA256 digest for DFA: F*09EA5201360922A91A9EEE72F4567792E9CFDFB591BA33419E2BF2B
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- **macroArray**\[1.0.6\], implementation of an array concept in a macro language, e.g.
|
- **macroArray**\[1.1.0\], implementation of an array concept in a macro language, e.g.
|
||||||
```sas
|
```sas
|
||||||
%array(ABC[17] (111:127), macarray=Y);
|
%array(ABC[17] (111:127), macarray=Y);
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ SHA256 digest for DFA: F*09EA5201360922A91A9EEE72F4567792E9CFDFB591BA33419E2BF2B
|
|||||||
which = 1:H:2
|
which = 1:H:2
|
||||||
);
|
);
|
||||||
```
|
```
|
||||||
SHA256 digest for macroArray: F*4FAAEE7DF2854EA31933AE017A89C1615C7291A66A07CCE345041EB0D587ED4E
|
SHA256 digest for macroArray: F*6A22A01868F4203862B3685F543D723C7DB8E9AB3C1A6357D2BFA030971B0D3C
|
||||||
|
|
||||||
[Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/macroarray.md "Documentation for macroArray")
|
[Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/macroarray.md "Documentation for macroArray")
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
/* 20230906 */
|
||||||
|
macroArray: F*6A22A01868F4203862B3685F543D723C7DB8E9AB3C1A6357D2BFA030971B0D3C
|
||||||
|
|
||||||
/* 20230904 */
|
/* 20230904 */
|
||||||
BasePlus: F*2FE68DD9B3692B9D46EF85B82F63C7E65010BF9E89D670FD1779F4670FA03F31
|
BasePlus: F*2FE68DD9B3692B9D46EF85B82F63C7E65010BF9E89D670FD1779F4670FA03F31
|
||||||
DFA: F*09EA5201360922A91A9EEE72F4567792E9CFDFB591BA33419E2BF2B31D9B7C62
|
DFA: F*09EA5201360922A91A9EEE72F4567792E9CFDFB591BA33419E2BF2B31D9B7C62
|
||||||
|
|||||||
@@ -278,6 +278,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
|||||||
<,macarray=N>
|
<,macarray=N>
|
||||||
<,ds=>
|
<,ds=>
|
||||||
<,vars=>
|
<,vars=>
|
||||||
|
<,q=>
|
||||||
)
|
)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@@ -312,8 +313,8 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
|||||||
`%array(myArr[*] x1-x3 (4:6), vnames=Y)`
|
`%array(myArr[*] x1-x3 (4:6), vnames=Y)`
|
||||||
will use `x1`, `x2`, and `x3` as values instead `4`, `5`, and `6`.
|
will use `x1`, `x2`, and `x3` as values instead `4`, `5`, and `6`.
|
||||||
|
|
||||||
* `macarray=N` - *Optional*, default value `N`, if set to `Y`/`YES` then macro named with array
|
* `macarray=N` - *Optional*, default value `N`, if set to `Y`/`YES` then a macro, named with the array
|
||||||
name is compiled to create convenient envelope for multiple ampersands, e.g.
|
name, is compiled to create convenient envelope for multiple ampersands, e.g.
|
||||||
`%array(myArr[*] x1-x3 (4:6), macarray=Y)`
|
`%array(myArr[*] x1-x3 (4:6), macarray=Y)`
|
||||||
will create `%myArr(J)` macro which will allow to extract "data"
|
will create `%myArr(J)` macro which will allow to extract "data"
|
||||||
from macroarray like:
|
from macroarray like:
|
||||||
@@ -325,8 +326,8 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
|||||||
macrovariables with prefix like the array name and numeric suffixes,
|
macrovariables with prefix like the array name and numeric suffixes,
|
||||||
then the minimum and the maximum index is determined
|
then the minimum and the maximum index is determined
|
||||||
and all not existing global macrovariables are created and
|
and all not existing global macrovariables are created and
|
||||||
a macro is generated in the same way as for the `Y` value
|
a macro is generated in the same way as for the `Y` value.
|
||||||
|
|
||||||
* `ds=` - *Optional*, use a dataset as a basis for a macroarray data,
|
* `ds=` - *Optional*, use a dataset as a basis for a macroarray data,
|
||||||
if used by default overwrites use of the `array` parameter, honors `macarray=`
|
if used by default overwrites use of the `array` parameter, honors `macarray=`
|
||||||
argument, dataset options are allowed, e.g. `sashelp.class(obs=5)`
|
argument, dataset options are allowed, e.g. `sashelp.class(obs=5)`
|
||||||
@@ -343,23 +344,27 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
|||||||
2) macroarray "WEIGHT" with ALL(no separator is equivalent to #)
|
2) macroarray "WEIGHT" with ALL(no separator is equivalent to #)
|
||||||
values of variable "weight" <br>
|
values of variable "weight" <br>
|
||||||
3) macroarray "W" with UNIQUE(|) values of variable "weight" and <br>
|
3) macroarray "W" with UNIQUE(|) values of variable "weight" and <br>
|
||||||
4) macroarray "AGE" with UNIQUE(|) values of variable "age",
|
4) macroarray "AGE" with UNIQUE(|) values of variable "age".
|
||||||
|
|
||||||
|
* `q=` - *Optional*, indicates (when set to `1`) if the value be surrounded by quotes.
|
||||||
|
It uses `quote(cats(...))` combo under the hood. Default value is `0`.
|
||||||
|
Ignored for `macarray=M`.
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### EXAMPLES AND USECASES: ####################################################
|
### EXAMPLES AND USECASES: ####################################################
|
||||||
|
|
||||||
|
|
||||||
**EXAMPLE 1.** Basic use-case.
|
**EXAMPLE 1.** Basic use-case.
|
||||||
Creating macroarray like in the array statement;
|
Creating macroarray like in the array statement.
|
||||||
values are used by default;
|
Values not variables names are used by default.
|
||||||
different types of brackets are allowed;
|
Different types of brackets are allowed.
|
||||||
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
%array(a[*] x1-x5 (1:5))
|
%array(a[*] x1-x5 (1:5))
|
||||||
|
|
||||||
%array(b{5} (5*17))
|
%array(b{5} (5*17), q=1)
|
||||||
|
|
||||||
%* Mind the $ since it is a character array!;
|
%* Mind the $ since it is a character array!;
|
||||||
%array(c(3) $ 10 ("a A" "b,B" "c;C"))
|
%array(c(3) $ 10 ("a A" "b,B" "c;C"))
|
||||||
@@ -405,7 +410,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
|||||||
%put &=g0. &=g1. &=g2.;
|
%put &=g0. &=g1. &=g2.;
|
||||||
|
|
||||||
%* Or something more complex;
|
%* Or something more complex;
|
||||||
%array(gg[0:11] $ 11, function = put(intnx("MONTH", '1jun2018'd, _I_, "E"), yymmn.))
|
%array(gg[0:11] $ 11, function = put(intnx("MONTH", '1jun2018'd, _I_, "E"), yymmn.), q=1)
|
||||||
%put &=ggLBOUND. &=ggHBOUND. &=ggN.;
|
%put &=ggLBOUND. &=ggHBOUND. &=ggN.;
|
||||||
%put &=gg0 &=gg1 &=gg2 ... &=gg11;
|
%put &=gg0 &=gg1 &=gg2 ... &=gg11;
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -433,10 +438,10 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
|||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|
||||||
**EXAMPLE 6a.** "Uppercas Letters"
|
**EXAMPLE 6a.** Quoted "Uppercas Letters"
|
||||||
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
%array(UL[26] $, function = byte(rank("A")+_I_-1) )
|
%array(UL[26] $, function = byte(rank("A")+_I_-1) , q=1)
|
||||||
%put &=UL1 &=UL2 ... &=UL25 &=UL26;
|
%put &=UL1 &=UL2 ... &=UL25 &=UL26;
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@@ -451,7 +456,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
|||||||
|
|
||||||
%* The range handling, warning;
|
%* The range handling, warning;
|
||||||
%put *%ll(265)*;
|
%put *%ll(265)*;
|
||||||
|
|
||||||
%* The input mode;
|
%* The input mode;
|
||||||
%put *before:*%ll(2)*;
|
%put *before:*%ll(2)*;
|
||||||
%let %ll(2,I) = bbbbb;
|
%let %ll(2,I) = bbbbb;
|
||||||
@@ -576,10 +581,10 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
|||||||
Currently the only separator in VARS is a space.
|
Currently the only separator in VARS is a space.
|
||||||
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
%array(ds = sashelp.class, vars = height#h weight weight|w age|)
|
%array(ds = sashelp.class, vars = height#h weight weight|w age|, q=1)
|
||||||
%put _user_;
|
%put _user_;
|
||||||
|
|
||||||
%array(ds = sashelp.class, vars = height#hght weight weight|wght age|, macarray=Y)
|
%array(ds = sashelp.class, vars = height#hght weight weight|wght age|, macarray=Y, q=1)
|
||||||
%put *%hght(&hghtLBOUND.)**%weight(2)**%wght(&wghtHBOUND.)**%age(3)*;
|
%put *%hght(&hghtLBOUND.)**%weight(2)**%wght(&wghtHBOUND.)**%age(3)*;
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@@ -599,7 +604,7 @@ The basic syntax is the following, the `<...>` means optional parameters:
|
|||||||
%let myTest6 = 16;
|
%let myTest6 = 16;
|
||||||
%let myTest9 = 19;
|
%let myTest9 = 19;
|
||||||
|
|
||||||
%array(myTest, macarray=M)
|
%array(myTest, macarray=M, q=1)
|
||||||
%do_over(myTest, phrase = %nrstr(%put *&_I_.*%myTest(&_I_.)*;))
|
%do_over(myTest, phrase = %nrstr(%put *&_I_.*%myTest(&_I_.)*;))
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user