mirror of
https://github.com/yabwon/SAS_PACKAGES.git
synced 2026-01-10 16:30:06 +00:00
BasePlus, version 0.8
BasePlus, version 0.8 - New macros added:`%dedupListS()`, `%dedupListC()`, `%dedupListP()`, `%dedupListX()`, and `%QdedupListX()`
This commit is contained in:
@@ -112,7 +112,7 @@ SHA256 digest for macroArray: 42771AA7CD2A0608E1EE25F104F21CCCC296919910E4BCA7AD
|
|||||||
[Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/master/packages/macroarray.md "Documentation for macroArray")
|
[Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/master/packages/macroarray.md "Documentation for macroArray")
|
||||||
|
|
||||||
|
|
||||||
- **BasePlus**\[0.7\] adds a bunch of functionalities I am missing in BASE SAS, such as:
|
- **BasePlus**\[0.8\] adds a bunch of functionalities I am missing in BASE SAS, such as:
|
||||||
```
|
```
|
||||||
call arrMissToRight(myArray);
|
call arrMissToRight(myArray);
|
||||||
call arrFillMiss(17, myArray);
|
call arrFillMiss(17, myArray);
|
||||||
@@ -126,7 +126,7 @@ format x bool.;
|
|||||||
|
|
||||||
%put %getVars(sashelp.class, pattern = ght$, sep = +, varRange = _numeric_);
|
%put %getVars(sashelp.class, pattern = ght$, sep = +, varRange = _numeric_);
|
||||||
```
|
```
|
||||||
SHA256 digest for BasePlus: BDEA8AA6EED9739284ABF8297BEC7EC0F12490D72EF9B685F477E99AFA734B82
|
SHA256 digest for BasePlus: 9549378E5F81DA4DC421C366DF006D270261852336CE3DCD88FF8E2A759938C8
|
||||||
|
|
||||||
[Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/master/packages/baseplus.md "Documentation for BasePlus")
|
[Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/master/packages/baseplus.md "Documentation for BasePlus")
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ SHA256 digest for macroArray: 42771AA7CD2A0608E1EE25F104F21CCCC296919910E4BCA7AD
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- **BasePlus**\[0.7\] adds a bunch of functionalities I am missing in BASE SAS, such as:
|
- **BasePlus**\[0.8\] adds a bunch of functionalities I am missing in BASE SAS, such as:
|
||||||
```
|
```
|
||||||
call arrMissToRight(myArray);
|
call arrMissToRight(myArray);
|
||||||
call arrFillMiss(17, myArray);
|
call arrFillMiss(17, myArray);
|
||||||
@@ -94,7 +94,7 @@ format x bool.;
|
|||||||
|
|
||||||
%put %getVars(sashelp.class, pattern = ght$, sep = +, varRange = _numeric_);
|
%put %getVars(sashelp.class, pattern = ght$, sep = +, varRange = _numeric_);
|
||||||
```
|
```
|
||||||
SHA256 digest for BasePlus: BDEA8AA6EED9739284ABF8297BEC7EC0F12490D72EF9B685F477E99AFA734B82
|
SHA256 digest for BasePlus: 9549378E5F81DA4DC421C366DF006D270261852336CE3DCD88FF8E2A759938C8
|
||||||
|
|
||||||
[Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/master/packages/baseplus.md "Documentation for BasePlus")
|
[Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/master/packages/baseplus.md "Documentation for BasePlus")
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
/* 20201020 */
|
||||||
|
BasePlus: 9549378E5F81DA4DC421C366DF006D270261852336CE3DCD88FF8E2A759938C8
|
||||||
|
|
||||||
/* 20201018 */
|
/* 20201018 */
|
||||||
BasePlus: BDEA8AA6EED9739284ABF8297BEC7EC0F12490D72EF9B685F477E99AFA734B82
|
BasePlus: BDEA8AA6EED9739284ABF8297BEC7EC0F12490D72EF9B685F477E99AFA734B82
|
||||||
DFA: E67A0863992722A5F535F56E14EF8D19A55F74FB374447BF11B5ED74029C29CB
|
DFA: E67A0863992722A5F535F56E14EF8D19A55F74FB374447BF11B5ED74029C29CB
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
- [The BasePlus package [ver. 0.7]](#baseplus-package)
|
- [The BasePlus package [ver. 0.8]](#baseplus-package)
|
||||||
- [Content description](#content-description)
|
- [Content description](#content-description)
|
||||||
* [`%getVars()` macro](#getvars-macro)
|
* [`%getVars()` macro](#getvars-macro)
|
||||||
* [`%QgetVars()` macro](#qgetvars-macro)
|
* [`%QgetVars()` macro](#qgetvars-macro)
|
||||||
@@ -28,11 +28,17 @@
|
|||||||
* [`quickSortHash()` subroutine](#quicksorthash-subroutine)
|
* [`quickSortHash()` subroutine](#quicksorthash-subroutine)
|
||||||
* [`quickSortHashSDDV()` subroutine](#quicksorthashsddv-subroutine)
|
* [`quickSortHashSDDV()` subroutine](#quicksorthashsddv-subroutine)
|
||||||
* [`quickSortLight()` subroutine](#quicksortlight-subroutine)
|
* [`quickSortLight()` subroutine](#quicksortlight-subroutine)
|
||||||
|
* [`%dedupListS()` macro](#deduplists-macro)
|
||||||
|
* [`%dedupListC()` macro](#deduplistc-macro)
|
||||||
|
* [`%dedupListP()` macro](#deduplistp-macro)
|
||||||
|
* [`%dedupListX()` macro](#deduplistx-macro)
|
||||||
|
* [`%QdedupListX()` macro](#qdeduplistx-macro)
|
||||||
|
|
||||||
* [License](#license)
|
* [License](#license)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# The BasePlus package [ver. 0.7] <a name="baseplus-package"></a> ###############################################
|
# The BasePlus package [ver. 0.8] <a name="baseplus-package"></a> ###############################################
|
||||||
|
|
||||||
The **BasePlus** package implements useful
|
The **BasePlus** package implements useful
|
||||||
functions and functionalities I miss in the BASE SAS.
|
functions and functionalities I miss in the BASE SAS.
|
||||||
@@ -40,6 +46,7 @@ functions and functionalities I miss in the BASE SAS.
|
|||||||
It is inspired by various people, e.g.
|
It is inspired by various people, e.g.
|
||||||
- at the SAS-L discussion list
|
- at the SAS-L discussion list
|
||||||
- at the communities.sas.com (SASware Ballot Ideas)
|
- at the communities.sas.com (SASware Ballot Ideas)
|
||||||
|
- at the Office...
|
||||||
- etc.
|
- etc.
|
||||||
|
|
||||||
Kudos to all who inspired me to generate this package:
|
Kudos to all who inspired me to generate this package:
|
||||||
@@ -149,44 +156,53 @@ Kudos to all who inspired me to generate this package:
|
|||||||
run;
|
run;
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
### Content ###################################################################
|
**Example 7**: Deduplicate values from a space separated list.
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%let list = 4 5 6 1 2 3 1 2 3 4 5 6;
|
||||||
|
%put *%dedupListS(&list.)*;
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Package contains:
|
Package contains:
|
||||||
1. macro getvars
|
1. macro deduplistc
|
||||||
2. macro qgetvars
|
2. macro deduplistp
|
||||||
3. macro symdelglobal
|
3. macro deduplists
|
||||||
4. format bool
|
4. macro deduplistx
|
||||||
5. format boolz
|
5. macro getvars
|
||||||
6. format ceil
|
6. macro qdeduplistx
|
||||||
7. format floor
|
7. macro qgetvars
|
||||||
8. format int
|
8. macro symdelglobal
|
||||||
9. function arrfill
|
9. format bool
|
||||||
10. function arrfillc
|
10. format boolz
|
||||||
11. function arrmissfill
|
11. format ceil
|
||||||
12. function arrmissfillc
|
12. format floor
|
||||||
13. function arrmisstoleft
|
13. format int
|
||||||
14. function arrmisstoleftc
|
14. functions arrfill
|
||||||
15. function arrmisstoright
|
15. functions arrfillc
|
||||||
16. function arrmisstorightc
|
16. functions arrmissfill
|
||||||
17. function catxfc
|
17. functions arrmissfillc
|
||||||
18. function catxfi
|
18. functions arrmisstoleft
|
||||||
19. function catxfj
|
19. functions arrmisstoleftc
|
||||||
20. function catxfn
|
20. functions arrmisstoright
|
||||||
21. function deldataset
|
21. functions arrmisstorightc
|
||||||
22. proto qsortincbyprocproto
|
22. functions catxfc
|
||||||
23. function frommissingtonumberbs
|
23. functions catxfi
|
||||||
24. function fromnumbertomissing
|
24. functions catxfj
|
||||||
25. function quicksort4notmiss
|
25. functions catxfn
|
||||||
26. function quicksorthash
|
26. functions deldataset
|
||||||
27. function quicksorthashsddv
|
27. proto qsortincbyprocproto
|
||||||
28. function quicksortlight
|
28. functions frommissingtonumberbs
|
||||||
|
29. functions fromnumbertomissing
|
||||||
|
30. functions quicksort4notmiss
|
||||||
|
31. functions quicksorthash
|
||||||
|
32. functions quicksorthashsddv
|
||||||
|
33. functions quicksortlight
|
||||||
|
|
||||||
*SAS package generated by generatePackage, version 20201001*
|
*SAS package generated by generatePackage, version 20201018*
|
||||||
|
|
||||||
The SHA256 hash digest for package BasePlus:
|
The SHA256 hash digest for package BasePlus:
|
||||||
`BDEA8AA6EED9739284ABF8297BEC7EC0F12490D72EF9B685F477E99AFA734B82`
|
`9549378E5F81DA4DC421C366DF006D270261852336CE3DCD88FF8E2A759938C8`
|
||||||
|
|
||||||
---
|
---
|
||||||
# Content description ############################################################################################
|
# Content description ############################################################################################
|
||||||
@@ -2131,6 +2147,312 @@ call quickSortLight(A)
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## >>> `%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.
|
||||||
|
|
||||||
|
Returned value is *unquoted*.
|
||||||
|
|
||||||
|
The `%dedupListS()` macro executes like a pure macro code.
|
||||||
|
|
||||||
|
### SYNTAX: ###################################################################
|
||||||
|
|
||||||
|
The basic syntax is the following, the `<...>` means optional parameters:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%dedupListS(
|
||||||
|
list of space separated values
|
||||||
|
)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
**Arguments description**:
|
||||||
|
|
||||||
|
1. `list` - A list of *space separated* values.
|
||||||
|
|
||||||
|
|
||||||
|
### EXAMPLES AND USECASES: ####################################################
|
||||||
|
|
||||||
|
**EXAMPLE 1.** Basic use-case one.
|
||||||
|
Delete duplicated values from a list.
|
||||||
|
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%put *%dedupListS(a b c b c)*;
|
||||||
|
|
||||||
|
%put *%dedupListS(a b,c b,c)*;
|
||||||
|
|
||||||
|
%put *%dedupListS(%str(a b c b c))*;
|
||||||
|
|
||||||
|
%put *%dedupListS(%str(a) %str(b) %str(c) b c)*;
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
**EXAMPLE 2.** Macro variable as an argument.
|
||||||
|
Delete duplicated values from a list.
|
||||||
|
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%let list = 4 5 6 1 2 3 1 2 3 4 5 6;
|
||||||
|
%put *%dedupListS(&list.)*;
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## >>> `%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.
|
||||||
|
|
||||||
|
Returned value is *unquoted*. Leading and trailing spaces are ignored.
|
||||||
|
|
||||||
|
The `%dedupListC()` macro executes like a pure macro code.
|
||||||
|
|
||||||
|
### SYNTAX: ###################################################################
|
||||||
|
|
||||||
|
The basic syntax is the following, the `<...>` means optional parameters:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%dedupListC(
|
||||||
|
list,of,comma,separated,values
|
||||||
|
)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
**Arguments description**:
|
||||||
|
|
||||||
|
1. `list` - A list of *comma separated* values.
|
||||||
|
|
||||||
|
|
||||||
|
### EXAMPLES AND USECASES: ####################################################
|
||||||
|
|
||||||
|
**EXAMPLE 1.** Basic use-case one.
|
||||||
|
Delete duplicated values from a list.
|
||||||
|
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%put *%dedupListC(a,b,c,b,c)*;
|
||||||
|
|
||||||
|
%put *%dedupListC(a,b c,b c)*;
|
||||||
|
|
||||||
|
%put *%dedupListC(%str(a,b,c,b,c))*;
|
||||||
|
|
||||||
|
%put *%dedupListC(%str(a),%str(b),%str(c),b,c)*;
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
**EXAMPLE 2.** Leading and trailing spaces are ignored.
|
||||||
|
Delete duplicated values from a list.
|
||||||
|
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%put *%dedupListC( a , b b , c , b b, c )*;
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
**EXAMPLE 3.** Macro variable as an argument.
|
||||||
|
Delete duplicated values from a list.
|
||||||
|
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%let list = 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6;
|
||||||
|
%put *%dedupListC(&list.)*;
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## >>> `%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.
|
||||||
|
|
||||||
|
Returned value is *unquoted*. Leading and trailing spaces are ignored.
|
||||||
|
|
||||||
|
The `%dedupListP()` macro executes like a pure macro code.
|
||||||
|
|
||||||
|
### SYNTAX: ###################################################################
|
||||||
|
|
||||||
|
The basic syntax is the following, the `<...>` means optional parameters:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%dedupListP(
|
||||||
|
list|of|pipe|separated|values
|
||||||
|
)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
**Arguments description**:
|
||||||
|
|
||||||
|
1. `list` - A list of *pipe separated* values.
|
||||||
|
|
||||||
|
|
||||||
|
### EXAMPLES AND USECASES: ####################################################
|
||||||
|
|
||||||
|
**EXAMPLE 1.** Basic use-case one.
|
||||||
|
Delete duplicated values from a list.
|
||||||
|
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%put *%dedupListP(a|b|c|b|c)*;
|
||||||
|
|
||||||
|
%put *%dedupListP(a|b c|b c)*;
|
||||||
|
|
||||||
|
%put *%dedupListP(%str(a|b|c|b|c))*;
|
||||||
|
|
||||||
|
%put *%dedupListP(%str(a)|%str(b)|%str(c)|b|c)*;
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
**EXAMPLE 2.** Leading and trailing spaces are ignored.
|
||||||
|
Delete duplicated values from a list.
|
||||||
|
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%put *%dedupListP( a | b b | c | b b| c )*;
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
**EXAMPLE 3.** Macro variable as an argument.
|
||||||
|
Delete duplicated values from a list.
|
||||||
|
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%let list = 4|5|6|1|2|3|1|2|3|4|5|6;
|
||||||
|
%put *%dedupListP(&list.)*;
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## >>> `%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 *single character* separator. List, including separators,
|
||||||
|
can be no longer than a value carried by a single macrovariable.
|
||||||
|
|
||||||
|
**Caution.** The value of `X` *has to be* in **the first** byte of the list,
|
||||||
|
just after the opening bracket, i.e. `(X...)`.
|
||||||
|
|
||||||
|
Returned value is *unquoted*. Leading and trailing spaces are ignored.
|
||||||
|
|
||||||
|
The `%dedupListX()` macro executes like a pure macro code.
|
||||||
|
|
||||||
|
### SYNTAX: ###################################################################
|
||||||
|
|
||||||
|
The basic syntax is the following, the `<...>` means optional parameters:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%dedupListX(
|
||||||
|
XlistXofXxXseparatedXvalues
|
||||||
|
)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
**Arguments description**:
|
||||||
|
|
||||||
|
1. `list` - A list of *X separated* values.
|
||||||
|
|
||||||
|
|
||||||
|
### EXAMPLES AND USECASES: ####################################################
|
||||||
|
|
||||||
|
**EXAMPLE 1.** Basic use-case one.
|
||||||
|
Delete duplicated values from a list.
|
||||||
|
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%put *%dedupListX(|a|b|c|b|c)*;
|
||||||
|
|
||||||
|
%put *%dedupListX( a b c b c)*;
|
||||||
|
|
||||||
|
%put *%dedupListX(,a,b,c,b,c)*;
|
||||||
|
|
||||||
|
%put *%dedupListX(XaXbXcXbXc)*;
|
||||||
|
|
||||||
|
%put *%dedupListX(/a/b/c/b/c)*;
|
||||||
|
|
||||||
|
data _null_;
|
||||||
|
x = "%dedupListX(%str(;a;b;c;b;c))";
|
||||||
|
put x=;
|
||||||
|
run;
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
**EXAMPLE 2.** Leading and trailing spaces are ignored.
|
||||||
|
Delete duplicated values from a list.
|
||||||
|
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%put *%dedupListX(| a | b.b | c | b.b| c )*;
|
||||||
|
|
||||||
|
%put *%dedupListX(. a . b b . c . b b. c )*;
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
**EXAMPLE 3.** Macro variable as an argument.
|
||||||
|
Delete duplicated values from a list.
|
||||||
|
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%let list = 4$5.5$6$1$2$3$1$2$3$4$5.5$6;
|
||||||
|
%put *%dedupListX($&list.)*;
|
||||||
|
|
||||||
|
%let list = 4$ 5.5$ 6$ 1$ 2$ 3$ 1$ 2$ 3$ 4$ 5.5$ 6$;
|
||||||
|
%put *%dedupListX( &list.)*;
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## >>> `%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 *single character* separator. List, including separators,
|
||||||
|
can be no longer than a value carried by a single macrovariable.
|
||||||
|
|
||||||
|
**Caution.** The value of `X` *has to be* in **the first** byte of the list,
|
||||||
|
just after the opening bracket, i.e. `(X...)`.
|
||||||
|
|
||||||
|
Returned value is **quoted** with `%superq()`. Leading and trailing spaces are ignored.
|
||||||
|
|
||||||
|
The `%QdedupListX()` macro executes like a pure macro code.
|
||||||
|
|
||||||
|
### SYNTAX: ###################################################################
|
||||||
|
|
||||||
|
The basic syntax is the following, the `<...>` means optional parameters:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%QdedupListX(
|
||||||
|
XlistXofXxXseparatedXvalues
|
||||||
|
)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
**Arguments description**:
|
||||||
|
|
||||||
|
1. `list` - A list of *X separated* values.
|
||||||
|
|
||||||
|
|
||||||
|
### EXAMPLES AND USECASES: ####################################################
|
||||||
|
|
||||||
|
**EXAMPLE 1.** Basic use-case one.
|
||||||
|
Delete duplicated values from a list.
|
||||||
|
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%put *%QdedupListX(|a|b|c|b|c)*;
|
||||||
|
|
||||||
|
%put *%QdedupListX( a b c b c)*;
|
||||||
|
|
||||||
|
%put *%QdedupListX(,a,b,c,b,c)*;
|
||||||
|
|
||||||
|
%put *%QdedupListX(XaXbXcXbXc)*;
|
||||||
|
|
||||||
|
%put *%QdedupListX(/a/b/c/b/c)*;
|
||||||
|
|
||||||
|
%put *%QdedupListX(%str(;a;b;c;b;c))*;
|
||||||
|
|
||||||
|
%put *%QdedupListX(%nrstr(&a&b&c&b&c))*;
|
||||||
|
|
||||||
|
%put *%QdedupListX(%nrstr(%a%b%c%b%c))*;
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
**EXAMPLE 2.** Leading and trailing spaces are ignored.
|
||||||
|
Delete duplicated values from a list.
|
||||||
|
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%put *%QdedupListX(| a | b.b | c | b.b| c )*;
|
||||||
|
|
||||||
|
%put *%QdedupListX(. a . b b . c . b b. c )*;
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
**EXAMPLE 3.** Macro variable as an argument.
|
||||||
|
Delete duplicated values from a list.
|
||||||
|
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
|
||||||
|
%let list = 4$5.5$6$1$2$3$1$2$3$4$5.5$6;
|
||||||
|
%put *%QdedupListX($&list.)*;
|
||||||
|
|
||||||
|
%let list = 4$ 5.5$ 6$ 1$ 2$ 3$ 1$ 2$ 3$ 4$ 5.5$ 6$;
|
||||||
|
%put *%QdedupListX( &list.)*;
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## License ####################################################################
|
## License ####################################################################
|
||||||
|
|
||||||
Copyright (c) 2020 Bartosz Jablonski
|
Copyright (c) 2020 Bartosz Jablonski
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user