From 425f7b389c29519698a502a171effa061669cd8d Mon Sep 17 00:00:00 2001 From: Bart Jablonski Date: Tue, 23 Jul 2024 22:14:24 +0200 Subject: [PATCH] The BasePlus package [ver. 2.0.0] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 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 ~~~~ --- packages/README.md | 6 +- packages/SHA256_for_packages.txt | 3 + packages/baseplus.md | 490 +++++++++++++++++++++++++++---- packages/baseplus.zip | Bin 308195 -> 315042 bytes 4 files changed, 432 insertions(+), 67 deletions(-) diff --git a/packages/README.md b/packages/README.md index 5733e26..06c58b2 100644 --- a/packages/README.md +++ b/packages/README.md @@ -86,7 +86,7 @@ SHA256 digest for macroArray: F*3F3893F1FCD78719543703E4353F4CC19811D247C016F220 --- -- **BasePlus**\[1.43.0\] adds a bunch of functionalities I am missing in BASE SAS, such as: +- **BasePlus**\[2.0.0\] adds a bunch of functionalities I am missing in BASE SAS, such as: ```sas call arrMissToRight(myArray); call arrFillMiss(17, myArray); @@ -115,8 +115,10 @@ format x bool.; %put %date(yymmddn10.) %time(time5.) %datetime(e8601dt.); %put %monthShift(2023,1,-5); + +%put #%expandDataSetsList(lib=sashelp,datasets=_all_)#; ``` -SHA256 digest for BasePlus: F*68BB953CD732EB43119A3339656670292317FE1C3B764EC57484C7D5C9DF23EB +SHA256 digest for BasePlus: F*0730DD793516E5C193842126A7EC9D339ADADD19F0F40B071F938CABDE4E66AD [Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md "Documentation for BasePlus") diff --git a/packages/SHA256_for_packages.txt b/packages/SHA256_for_packages.txt index c49c4d2..ec4960c 100644 --- a/packages/SHA256_for_packages.txt +++ b/packages/SHA256_for_packages.txt @@ -1,3 +1,6 @@ +/* 20240722 */ +BasePlus: F*0730DD793516E5C193842126A7EC9D339ADADD19F0F40B071F938CABDE4E66AD + /* 20240722 */ BasePlus: F*68BB953CD732EB43119A3339656670292317FE1C3B764EC57484C7D5C9DF23EB diff --git a/packages/baseplus.md b/packages/baseplus.md index fd2b3f0..ba84be3 100644 --- a/packages/baseplus.md +++ b/packages/baseplus.md @@ -9,22 +9,22 @@ ### Version information: - Package: BasePlus -- Version: 1.43.0 -- Generated: 2024-07-22T08:50:35 +- Version: 2.0.0 +- Generated: 2024-07-23T21:51:33 - Author(s): Bartosz Jablonski (yabwon@gmail.com), Quentin McMullen (qmcmullen@gmail.com) - Maintainer(s): Bartosz Jablonski (yabwon@gmail.com) - License: MIT -- File SHA256: `F*68BB953CD732EB43119A3339656670292317FE1C3B764EC57484C7D5C9DF23EB` for this version -- Content SHA256: `C*7436BD6446CDA2F57163B7BA45482750D460CA9AEFDCA4012253D742B8EE5E65` for this version +- File SHA256: `F*0730DD793516E5C193842126A7EC9D339ADADD19F0F40B071F938CABDE4E66AD` for this version +- Content SHA256: `C*0352F7BB04B99D620BEFD33FF1B1FF1835E6F8F21CC6A764D05EEE51E77E57E0` for this version --- -# The `BasePlus` package, version: `1.43.0`; +# The `BasePlus` package, version: `2.0.0`; --- -# The BasePlus package [ver. 1.43.0] ############################################### +# The BasePlus package [ver. 2.0.0] ############################################### 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; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + --- --- @@ -439,38 +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. [`%generateoneliners()` macro ](#generateoneliners-macro-64 ) -65. [`%gettitle()` macro ](#gettitle-macro-65 ) -66. [`%iffunc()` macro ](#iffunc-macro-66 ) -67. [`%infmt()` macro ](#infmt-macro-67 ) -68. [`%letters()` macro ](#letters-macro-68 ) -69. [`%libpath()` macro ](#libpath-macro-69 ) -70. [`%minclude()` macro ](#minclude-macro-70 ) -71. [`%monthshift()` macro ](#monthshift-macro-71 ) -72. [`%replist()` macro ](#replist-macro-72 ) -73. [`%time()` macro ](#time-macro-73 ) -74. [`%today()` macro ](#today-macro-74 ) -75. [`%translate()` macro ](#translate-macro-75 ) -76. [`%tranwrd()` macro ](#tranwrd-macro-76 ) -77. [`%workpath()` macro ](#workpath-macro-77 ) +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 ) -78. [License note](#license) +82. [License note](#license) --- @@ -4496,7 +4519,129 @@ semicolonN(X) --- -## `$brackets.` format/informat ###### +## `$bpklenght.` format/informat ###### + +## >>> `bpklenght` format/informat: <<< ####################### + +The **bpklenght** 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, bpklenght.); + c = input (x, $bpklenght.); + format x $bpklenght.; +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 $bpklenght.; + end; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + + +--- + +## `$bplenght.` format/informat ###### + +## >>> `bplenght` format/informat: <<< ####################### + +The **bplenght** 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, bplenght.); + c = input (x, $bplenght.); + format x $bplenght.; +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 $bplenght.; + end; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + + +--- + +## `$brackets.` format/informat ###### ## >>> `brackets.` format: <<< ####################### @@ -4527,7 +4672,7 @@ run; --- -## `$semicolon.` format/informat ###### +## `$semicolon.` format/informat ###### ## >>> `semicolon.` format: <<< ####################### @@ -4551,7 +4696,7 @@ run; --- -## `qsortincbyprocproto()` proto ###### +## `qsortincbyprocproto()` proto ###### ## >>> `qsortInCbyProcProto()` proto function: <<< ####################### @@ -4613,7 +4758,7 @@ Based on the code from the following pages [2020.08.14]: --- -## `frommissingtonumberbs()` function ###### +## `frommissingtonumberbs()` function ###### ## >>> `fromMissingToNumberBS()` function: <<< ####################### @@ -4666,7 +4811,7 @@ fromMissingToNumberBS(x) --- -## `fromnumbertomissing()` function ###### +## `fromnumbertomissing()` function ###### ## >>> `fromNumberToMissing()` function: <<< ####################### @@ -4718,7 +4863,7 @@ fromNumberToMissing(x) --- -## `quicksort4notmiss()` function ###### +## `quicksort4notmiss()` function ###### ## >>> `quickSort4NotMiss()` subroutine: <<< ####################### @@ -4812,7 +4957,7 @@ call quickSort4NotMiss(A) --- -## `quicksorthash()` function ###### +## `quicksorthash()` function ###### ## >>> `quickSortHash()` subroutine: <<< ####################### @@ -5053,7 +5198,7 @@ call quickSortHash(A) --- -## `quicksorthashsddv()` function ###### +## `quicksorthashsddv()` function ###### ## >>> `quickSortHashSDDV()` subroutine: <<< ####################### @@ -5184,7 +5329,7 @@ call quickSortHashSDDV(A, SDDV) --- -## `quicksortlight()` function ###### +## `quicksortlight()` function ###### ## >>> `quickSortLight()` subroutine: <<< ####################### @@ -5393,7 +5538,7 @@ call quickSortLight(A) --- -## `%date()` macro ###### +## `%date()` macro ###### ## >>> `%date()` macro: <<< ####################### @@ -5436,7 +5581,7 @@ The basic syntax is the following, the `<...>` means optional parameters: --- -## `%datetime()` macro ###### +## `%datetime()` macro ###### ## >>> `%datetime()` macro: <<< ####################### @@ -5493,7 +5638,7 @@ The basic syntax is the following, the `<...>` means optional parameters: --- -## `%downloadfilesto()` macro ###### +## `%downloadfilesto()` macro ###### ## >>> `%downloadFilesTo()` macro: <<< ####################### @@ -5625,7 +5770,111 @@ run; --- -## `%filepath()` macro ###### +## `%expanddatasetslist()` macro ###### + +## >>> `%expandDataSetsList()` macro: <<< ####################### + +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 ###### ## >>> `%filePath()` macro: <<< ####################### @@ -5665,7 +5914,7 @@ The basic syntax is the following, the `<...>` means optional parameters: --- -## `%finddswithvarval()` macro ###### +## `%finddswithvarval()` macro ###### ## >>> `%findDSwithVarVal()` macro: <<< ####################### @@ -5793,7 +6042,7 @@ The basic syntax is the following, the `<...>` means optional parameters: --- -## `%fmt()` macro ###### +## `%fmt()` macro ###### ## >>> `%fmt()` macro: <<< ####################### @@ -5862,7 +6111,7 @@ The basic syntax is the following, the `<...>` means optional parameters: --- -## `%generateoneliners()` macro ###### +## `%generateoneliners()` macro ###### ## >>> `%GenerateOneLiners()` macro: <<< ####################### @@ -5980,7 +6229,7 @@ The basic syntax is the following, the `<...>` means optional parameters: --- -## `%gettitle()` macro ###### +## `%gettitle()` macro ###### ## >>> `%getTitle()` macro: <<< ####################### @@ -6066,7 +6315,7 @@ The basic syntax is the following, the `<...>` means optional parameters: --- -## `%iffunc()` macro ###### +## `%iffunc()` macro ###### ## >>> `%iffunc()` macro: <<< ####################### @@ -6267,7 +6516,7 @@ The basic syntax is the following, the `<...>` means optional parameters: --- -## `%infmt()` macro ###### +## `%infmt()` macro ###### ## >>> `%infmt()` macro: <<< ####################### @@ -6324,7 +6573,7 @@ The basic syntax is the following, the `<...>` means optional parameters: --- -## `%letters()` macro ###### +## `%letters()` macro ###### ## >>> `%letters()` macro: <<< ####################### @@ -6442,7 +6691,7 @@ The basic syntax is the following, the `<...>` means optional parameters: --- -## `%libpath()` macro ###### +## `%libpath()` macro ###### ## >>> `%libPath()` macro: <<< ####################### @@ -6487,7 +6736,7 @@ The basic syntax is the following, the `<...>` means optional parameters: --- -## `%minclude()` macro ###### +## `%minclude()` macro ###### ## >>> `%mInclude()` macro: <<< ####################### @@ -6700,7 +6949,7 @@ quit; --- -## `%monthshift()` macro ###### +## `%monthshift()` macro ###### ## >>> `%monthShift()` macro: <<< ####################### @@ -6849,7 +7098,7 @@ The basic syntax is the following, the `<...>` means optional parameters: --- -## `%replist()` macro ###### +## `%replist()` macro ###### ## >>> `%repList()` macro: <<< ####################### @@ -6965,7 +7214,7 @@ run; --- -## `%time()` macro ###### +## `%time()` macro ###### ## >>> `%time()` macro: <<< ####################### @@ -7008,7 +7257,7 @@ The basic syntax is the following, the `<...>` means optional parameters: --- -## `%today()` macro ###### +## `%today()` macro ###### ## >>> `%today()` macro: <<< ####################### @@ -7051,7 +7300,7 @@ The basic syntax is the following, the `<...>` means optional parameters: --- -## `%translate()` macro ###### +## `%translate()` macro ###### ## >>> `%translate()` macro: <<< ####################### @@ -7115,7 +7364,7 @@ The basic syntax is the following, the `<...>` means optional parameters: --- -## `%tranwrd()` macro ###### +## `%tranwrd()` macro ###### ## >>> `%tranwrd()` macro: <<< ####################### @@ -7182,7 +7431,118 @@ The basic syntax is the following, the `<...>` means optional parameters: --- -## `%workpath()` macro ###### +## `%unifyvarscasesize()` macro ###### + +## >>> `%unifyVarsCaseSize()` macro: <<< ####################### + +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 ###### ## >>> `%workPath()` macro: <<< ####################### diff --git a/packages/baseplus.zip b/packages/baseplus.zip index 4a93a727288df2b323e3fa55b14338938f0e5c72..bddaeb003613db125215ccc50712e412a0993bb9 100644 GIT binary patch delta 27702 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 SAqr**~400UVMhF_61Z9q~^r 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