From 01b1300a5561d21ce7b91b4d21c250df982b927d Mon Sep 17 00:00:00 2001 From: Bart Jablonski Date: Thu, 26 Oct 2023 13:27:22 +0200 Subject: [PATCH] The BasePlus package [ver. 1.32.0] The BasePlus package [ver. 1.32.0] New `%monthShift()` macro added: ```sas %put %monthShift(2023,1,-3); ``` Doc. updated. --- README.md | 4 +- baseplus.md | 306 +- baseplus.zip | Bin 287196 -> 289082 bytes hist/1.32.0/baseplus.md | 5932 ++++++++++++++++++++++++++++++++++++++ hist/1.32.0/baseplus.zip | Bin 0 -> 289082 bytes 5 files changed, 6165 insertions(+), 77 deletions(-) create mode 100644 hist/1.32.0/baseplus.md create mode 100644 hist/1.32.0/baseplus.zip diff --git a/README.md b/README.md index a2391a1..8b03342 100644 --- a/README.md +++ b/README.md @@ -47,10 +47,12 @@ libname NEW "%workPath()/new"; %put %tranwrd(Miss Joan Smith,Miss,Ms.); %put %date() %time() %datetime(); + +%put %monthShift(2023,1,-5); ``` and more. -SHA256 digest for the latest version of `BasePlus`: F*7EF23E80A2C03B29402183D97ECFF608B62BEDD9458848709B52DC362E6201B9 +SHA256 digest for the latest version of `BasePlus`: F*81EF4FA7E1D9363A991B686F38C6569FFB22024CB9C67A9395EEF6D4257D508E [**Documentation for BasePlus**](./baseplus.md "Documentation for BasePlus") diff --git a/baseplus.md b/baseplus.md index c71d251..026e536 100644 --- a/baseplus.md +++ b/baseplus.md @@ -64,6 +64,7 @@ * [`%today()` macro](#today-macro) * [`%time()` macro](#time-macro) * [`%datetime()` macro](#datetime-macro) + * [`%monthShift()` macro](#monthshift-macro) * [`%translate()` macro](#translate-macro) * [`%tranwrd()` macro](#tranwrd-macro) * [`%findDSwithVarVal()` macro](#finddswithvarval-macro) @@ -77,7 +78,7 @@ --- -# The BasePlus package [ver. 1.31.0] ############################################### +# The BasePlus package [ver. 1.32.0] ############################################### The **BasePlus** package implements useful functions and functionalities I miss in the BASE SAS. @@ -85,6 +86,7 @@ functions and functionalities I miss in the BASE SAS. It is inspired by various people, e.g. - at the SAS-L discussion list - at the communities.sas.com (SASware Ballot Ideas) +- at StackOverflow - at the Office... - etc. @@ -100,8 +102,6 @@ Kudos to all who inspired me to generate this package: *Kurt Bremser*, *Leonid Batkhan*. -Recording from the SAS Explore 2022 conference: [A BasePlus Package for SAS](https://communities.sas.com/t5/SAS-Explore-Presentations/A-BasePlus-Package-for-SAS/ta-p/838246 "A BasePlus Package for SAS") (September 27th-29th, 2022). - --- ### BASIC EXAMPLES AND USECASES: #################################################### @@ -345,90 +345,101 @@ run; %put %today() %date() %time() %datetime(); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +**EXAMPLE 24** Months shifting: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put + Past: %monthShift(2023, 1, -1) + Current: %monthShift(2023, 1 ) + Future: %monthShift(2023, 1, +1) +; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + --- Package contains: -1. macro bppipe -2. macro deduplistc -3. macro deduplistp -4. macro deduplists -5. macro deduplistx -6. macro dirsandfiles -7. macro functionexists -8. macro getvars -9. macro intslist -10. macro ldsn -11. macro ldsnm -12. macro lvarnm -13. macro lvarnmlab -14. macro qdeduplistx -15. macro qgetvars -16. macro qzipevalf -17. macro raincloudplot -18. macro repeattxt -19. macro splitdsintoblocks -20. macro splitdsintoparts -21. macro symdelglobal -22. macro unziplibrary -23. macro zipevalf -24. macro ziplibrary -25. format bool -26. format boolz -27. format ceil -28. format floor -29. format int -30. function arrfill -31. function arrfillc -32. function arrmissfill -33. function arrmissfillc -34. function arrmisstoleft -35. function arrmisstoleftc -36. function arrmisstoright -37. function arrmisstorightc -38. function bracketsc -39. function bracketsn -40. function catxfc -41. function catxfi -42. function catxfj -43. function catxfn -44. function deldataset -45. function semicolonc -46. function semicolonn -47. format brackets -48. format semicolon -49. proto qsortincbyprocproto -50. function frommissingtonumberbs -51. function fromnumbertomissing -52. function quicksort4notmiss -53. function quicksorthash -54. function quicksorthashsddv -55. function quicksortlight -56. macro date -57. macro datetime -58. macro filepath -59. macro finddswithvarval -60. macro fmt -61. macro gettitle -62. macro infmt -63. macro letters -64. macro libpath -65. macro minclude -66. macro replist -67. macro time -68. macro today -69. macro translate -70. macro tranwrd -71. macro workpath +1. macro bppipe +2. macro deduplistc +3. macro deduplistp +4. macro deduplists +5. macro deduplistx +6. macro dirsandfiles +7. macro functionexists +8. macro getvars +9. macro intslist +10. macro ldsn +11. macro ldsnm +12. macro lvarnm +13. macro lvarnmlab +14. macro qdeduplistx +15. macro qgetvars +16. macro qzipevalf +17. macro raincloudplot +18. macro repeattxt +19. macro splitdsintoblocks +20. macro splitdsintoparts +21. macro symdelglobal +22. macro unziplibrary +23. macro zipevalf +24. macro ziplibrary +25. format bool +26. format boolz +27. format ceil +28. format floor +29. format int +30. function arrfill +31. function arrfillc +32. function arrmissfill +33. function arrmissfillc +34. function arrmisstoleft +35. function arrmisstoleftc +36. function arrmisstoright +37. function arrmisstorightc +38. function bracketsc +39. function bracketsn +40. function catxfc +41. function catxfi +42. function catxfj +43. function catxfn +44. function deldataset +45. function semicolonc +46. function semicolonn +47. format brackets +48. format semicolon +49. proto qsortincbyprocproto +50. function frommissingtonumberbs +51. function fromnumbertomissing +52. function quicksort4notmiss +53. function quicksorthash +54. function quicksorthashsddv +55. function quicksortlight +56. macro date +57. macro datetime +58. macro filepath +59. macro finddswithvarval +60. macro fmt +61. macro gettitle +62. macro infmt +63. macro letters +64. macro libpath +65. macro minclude +66. macro monthshift +67. macro replist +68. macro time +69. macro today +70. macro translate +71. macro tranwrd +72. macro workpath + Package contains additional content, run: %loadPackageAddCnt(BasePlus) to load it or look for the baseplus_AdditionalContent directory in the Packages fileref localization (only if additional content was deployed during the installation process). -* SAS package generated by generatePackage, version 20231009 * +* SAS package generated by generatePackage, version 20231024 * The SHA256 hash digest for package BasePlus: -`F*7EF23E80A2C03B29402183D97ECFF608B62BEDD9458848709B52DC362E6201B9` +`F*81EF4FA7E1D9363A991B686F38C6569FFB22024CB9C67A9395EEF6D4257D508E` --- # Content description ############################################################################################ @@ -5107,6 +5118,149 @@ The basic syntax is the following, the `<...>` means optional parameters: --- +## >>> `%monthShift()` macro: <<< ####################### + +The monthShift() macro is a utility macro +which allows to shift "year-month" period by +a given number of "periods" (months). + +The result is in the `YYYYMM` format but can be altered. + +See examples below for the details. + +The `%monthShift()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%monthShift( + < Y> + <,M> + <,shift> + <,ofmt=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `Y` - *Optional*, a year from which counting starts. + If null the value is set to *system year*. + +2. `M` - *Optional*, a month from which counting starts. + If null the value is set to `1`. Can be a number + (`1` to `12`) or a name (`June`, `OCTOBER`) or + a three letters short (`JAN`, `apr`). + +3. `shift` - *Optional*, number of periods to shift. + If null the value is set to `0`. + Positive value shifts to the "future", + negative value shifts to the "past", + Can be an expression (e.g. `1+2*3`, see examples). + +* `ofmt=YYMMn6.` - *Optional*, it is a format name used to + display the result. Default value is `YYMMn6.` + See examples. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Shift one up and one down: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put + Past: %monthShift(2023, 1, -1) + Current: %monthShift(2023, 1 ) + Future: %monthShift(2023, 1, +1) +; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Shift by expression: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let n = 2; + %put + %monthShift(2023, 1, +1 + &n.*3) + ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Shift with default values: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %monthShift(); + %put %monthShift(2023); + %put %monthShift(2023,Jan); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Shift with months names: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put + %monthShift(2023,Jan,-1) + %monthShift(2023,Feb,-2) + %monthShift(2023,Mar,-3) + %monthShift(2023,Apr,-4) + %monthShift(2023,May,-5) + %monthShift(2023,Jun,-6) + %monthShift(2023,Jul,-7) + %monthShift(2023,Aug,-8) + %monthShift(2023,Sep,-9) + %monthShift(2023,Oct,-10) + %monthShift(2023,Nov,-11) + %monthShift(2023,Dec,-12) + ; + + %put + %monthShift(2023,January,12) + %monthShift(2023,February,11) + %monthShift(2023,March,10) + %monthShift(2023,April,9) + %monthShift(2023,May,8) + %monthShift(2023,June,7) + %monthShift(2023,July,6) + %monthShift(2023,August,5) + %monthShift(2023,September,4) + %monthShift(2023,October,3) + %monthShift(2023,November,2) + %monthShift(2023,December,1) + ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** Play with formatting: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put + %monthShift(2023, 1, +1 ) + %monthShift(2023, 1, +1, ofmt=yymm7. ) + %monthShift(2023, 1, +1, ofmt=yymmd7.) + %monthShift(2023, 1, +1, ofmt=yymms7.) + ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** Read monthly data with `noDSNFERR` option: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data + A202210 A202211 A202212 + A202301 A202302 A202303 + A202304 A202305 A202306 + A202307 A202308 A202309 + ; + set sashelp.class; + run; + + + options noDSNFERR; + data ALL; + set + A%monthShift(2023, 9, -12) - A%monthShift(2023, 9) + ; + run; + options DSNFERR; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + ## >>> `%translate()` macro: <<< ####################### diff --git a/baseplus.zip b/baseplus.zip index 257d4a1faeaad2abf8add507b9843c858dd78b3d..7f90b6fe5ab88ce1d4133868b3de23df714c4f69 100644 GIT binary patch delta 16814 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 KEmDU%0Qf%_s&ujd delta 14784 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 N ############################################### + +The **BasePlus** package implements useful +functions and functionalities I miss in the BASE SAS. + +It is inspired by various people, e.g. +- at the SAS-L discussion list +- at the communities.sas.com (SASware Ballot Ideas) +- at StackOverflow +- at the Office... +- etc. + +Kudos to all who inspired me to generate this package: +*Mark Keintz*, +*Paul Dorfman*, +*Richard DeVenezia*, +*Christian Graffeuille*, +*Allan Bowe*, +*Anamaria Calai*, +*Michal Ludwicki*, +*Quentin McMullen*, +*Kurt Bremser*, +*Leonid Batkhan*. + +--- + +### BASIC EXAMPLES AND USECASES: #################################################### + +**Example 1**: One-dimensional array functions. + Array parameters to subroutine + calls must be 1-based. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data _null_; + array X[4] _temporary_ (. 1 . 2); + + call arrMissToRight(X); + do i = 1 to 4; + put X[i]= @; + end; + put; + + call arrFillMiss(17, X); + do i = 1 to 4; + put X[i]= @; + end; + put; + + call arrFill(42, X); + do i = 1 to 4; + put X[i]= @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2**: Delete dataset by name. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data toDrop; + x = 17; + run; + data _null_; + p = delDataset("toDrop"); + put p=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 3**: Strings concatenation with format. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data test; + x = 1 ; y = . ; z = 3 ; + t = "t"; u = " "; v = "v"; + + array a[*] x y z; + array b[*] t u v; + + length s1 s2 s3 s4 $ 17; + s1 = catXFn("z5.", "#", A); + s2 = catXFi("z5.", "#", A); + s3 = catXFc("upcase.", "*", B); + s4 = catXFj("upcase.", "*", B); + + put (_all_) (=); + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 4**: Useful formats. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data _null_; + input x @@; + put @1 x= @11 x= bool. @21 x= int. @31 x= ceil. @41 x= floor.; + cards; + . ._ .A -10 -3.14 0 3.14 10 + ; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 5**: Getting variables names from datasets. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class + ,pattern = ght$ + ,sep = + + ,varRange = _numeric_)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 6**: Quick sort as an alternative to call sortn() +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data _null_; + array test[25000000] _temporary_ ; + + t = time(); + call streaminit(123); + do _N_ = 25000000 to 1 by -1; + test[_N_] = rand("uniform"); + end; + t = time() - t; + put "Array population time: " t; + + t = time(); + call quickSortLight (test); + t = time()-t; + put "Sorting time: " / t=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**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.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 8**: Zip elements of two space separated list. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, 2018 2019 2020, argMd=5, function=MDY, format=date11.); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 9**: Simple Rain Cloud plot. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%rainCloudPlot(sashelp.cars,DriveTrain,Invoice) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 10**: Zip SAS library. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(sashelp, libOut=work) + +%unzipLibrary(%sysfunc(pathname(work)), zip=sashelp, mode=S, clean=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 11**: Long dataset names. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s (drop = sex rename=(name=first_name) where = (age in (12,13,14))) ); + set sashelp.class; +run; + +proc print data = %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ); +run; + +data MyNextDataset; + set %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ); + where age > 12; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 12**: List, to the log, content of `home` directory. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%bpPIPE(ls -la ~/) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 13** Get list of all files and directories from `C:\SAS_WORK\`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 14** Text repetition: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 15** Integer list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %intsList(42); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 16** Split dataset into blocks of 5 observations: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%splitDSIntoBlocks(5, sashelp.class, classBlock) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 17** Split dataset into 7 parts: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%splitDSIntoParts(7, sashelp.cars, carsPart) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 18** Return path to temporary file: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + filename f temp; + %put %filePath(f); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 19** Get titles: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + title1 j=c "Hi Roger" ; + title2 j=l "Good Morning" ; + title3 "How are you?" ; + title4 ; + title5 "Bye bye!" ; + + %put %GetTitle(1 2 3 5, dlm=s, qt='') ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 20** Format and informat macro variables values: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %fmt(12345, date9.) %fmt(12345, yymmdd10.); + + %put %infmt($111234, dollar10.2); + %put %infmt($111.234, dollar10.2); + + %let text = ##%fmt(ABC, $char9., -C)##; + %put &text.; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 21** "Macro including" a text file: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + filename f "%workpath()/testFile1.txt"; + data _null_; + file f; + put "13 14 15"; + run; + + data testDataset; + set sashelp.class; + where age in ( %mInclude(f) ); + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 22** Repeating texts and lists: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options mprint; + +data work.A; + x=17; +data work.B; + x=42; +data work.C; + x=303; +run; + +data work.test5; + set + %repeatTxt(work.A work.B work.C, 5) + ; +run; + + +data Times2_A3B4C5; + set + %repList(work.A work.B work.C, times = 2, each = 3 4 5) + ; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 23** Date and time one-liners: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %today() %date() %time() %datetime(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 24** Months shifting: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put + Past: %monthShift(2023, 1, -1) + Current: %monthShift(2023, 1 ) + Future: %monthShift(2023, 1, +1) +; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +Package contains: +1. macro bppipe +2. macro deduplistc +3. macro deduplistp +4. macro deduplists +5. macro deduplistx +6. macro dirsandfiles +7. macro functionexists +8. macro getvars +9. macro intslist +10. macro ldsn +11. macro ldsnm +12. macro lvarnm +13. macro lvarnmlab +14. macro qdeduplistx +15. macro qgetvars +16. macro qzipevalf +17. macro raincloudplot +18. macro repeattxt +19. macro splitdsintoblocks +20. macro splitdsintoparts +21. macro symdelglobal +22. macro unziplibrary +23. macro zipevalf +24. macro ziplibrary +25. format bool +26. format boolz +27. format ceil +28. format floor +29. format int +30. function arrfill +31. function arrfillc +32. function arrmissfill +33. function arrmissfillc +34. function arrmisstoleft +35. function arrmisstoleftc +36. function arrmisstoright +37. function arrmisstorightc +38. function bracketsc +39. function bracketsn +40. function catxfc +41. function catxfi +42. function catxfj +43. function catxfn +44. function deldataset +45. function semicolonc +46. function semicolonn +47. format brackets +48. format semicolon +49. proto qsortincbyprocproto +50. function frommissingtonumberbs +51. function fromnumbertomissing +52. function quicksort4notmiss +53. function quicksorthash +54. function quicksorthashsddv +55. function quicksortlight +56. macro date +57. macro datetime +58. macro filepath +59. macro finddswithvarval +60. macro fmt +61. macro gettitle +62. macro infmt +63. macro letters +64. macro libpath +65. macro minclude +66. macro monthshift +67. macro replist +68. macro time +69. macro today +70. macro translate +71. macro tranwrd +72. macro workpath + + + +Package contains additional content, run: %loadPackageAddCnt(BasePlus) to load it +or look for the baseplus_AdditionalContent directory in the Packages fileref +localization (only if additional content was deployed during the installation process). + +* SAS package generated by generatePackage, version 20231024 * + +The SHA256 hash digest for package BasePlus: +`F*81EF4FA7E1D9363A991B686F38C6569FFB22024CB9C67A9395EEF6D4257D508E` + +--- +# Content description ############################################################################################ + +## >>> `%getVars()` macro: <<< ####################### + +The getVars() and QgetVars() macro functions +allow to extract variables names form a dataset +according to a given pattern into a list. + +The getVars() returns unquoted value [by %unquote()]. +The QgetVars() returns quoted value [by %superq()]. + +See examples below for the details. + +The `%getVars()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%getVars( + ds + <,sep=> + <,pattern=> + <,varRange=> + <,quote=> + <,mcArray=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `ds` - *Required*, the name of the dataset from + which variables are to be taken. + +* `sep = %str( )` - *Optional*, default value `%str( )`, + a variables separator on the created list. + +* `pattern = .*` - *Optional*, default value `.*` (i.e. any text), + a variable name regexp pattern, case INSENSITIVE! + +* `varRange = _all_` - *Optional*, default value `_all_`, + a named range list of variables. + +* `quote =` - *Optional*, default value is blank, a quotation + symbol to be used around values. + +* `mcArray=` - *Optional*, default value is blank. + 1) When *null* - the macro behaves like a macro function + and returns a text string with variables list. + 2) When *not null* - behaviour of the macro is altered. + In such case a macro array of selected variables, named + with `mcArray` value as a prefix, is created. + Furthermore a macro named as `mcArray` value is generated. + (see the macroArray package for the details). + When `mcArray=` parameter is active the `getVars` macro + cannot be called within the `%put` statement. Execution like: + `%put %getVars(..., mcArray=XXX);` will result with + an Explicit & Radical Refuse Of Run (aka ERROR). + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** A list of all variables from the + sashelp.class dataset: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** A list of all variables from the + sashelp.class dataset separated + by backslash: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let x = %getVars(sashelp.class, sep=\); + %put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Use of regular expressions: + a) A list of variables which name contains "i" or "a" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, pattern=i|a)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + b) A list of variables which name starts with "w" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, pattern=^w)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + c) A list of variables which name ends with "ght" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, pattern=ght$)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** A list of numeric variables which name + starts with "w" or "h" or ends with "x" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, sep=+, pattern=^(w|h)|x$, varRange=_numeric_)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data test; + array x[30]; + array y[30] $ ; + array z[30]; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + a) A list of variables separated by a comma: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(test, sep=%str(,))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + b) A list of variables separated by a comma + with suffix 5 or 7: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(test, sep=%str(,), pattern=(5|7)$)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + c) A list of variables separated by a comma + with suffix 5 or 7 from a given variables range: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(test, sep=%str(,), varRange=x10-numeric-z22 y6-y26, pattern=(5|7)$)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** Case of quotes and special characters + when the quote= parameter is _not_ used: + + a) one single or double qiote: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%bquote(%getVars(sashelp.class, sep=%str(%")))*; + %put *%bquote(%getVars(sashelp.class, sep=%str(%')))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + b) two single or double qiotes: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *"%bquote(%getVars(sashelp.class,sep=""))"*; + %put *%str(%')%bquote(%getVars(sashelp.class,sep=''))%str(%')*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + c) coma separated double quote list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *"%getVars(sashelp.class,sep=%str(", "))"*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + d) coma separated single quote list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%str(%')%getVars(sashelp.class,sep=', ')%str(%')*; + %let x = %str(%')%getVars(sashelp.class,sep=', ')%str(%'); + + %put *%str(%')%QgetVars(sashelp.class,sep=', ')%str(%')*; + %let y = %str(%')%QgetVars(sashelp.class,sep=', ')%str(%'); + %let z = %unquote(&y.); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + e) ampersand (&) as a separator [compare behaviour]: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class,sep=&)*; + %let x = %getVars(sashelp.class,sep=&); + + %put *%getVars(sashelp.class,sep=%str( & ))*; + %let x = %getVars(sashelp.class,sep=%str( & )); + + %put *%QgetVars(sashelp.class,sep=&)*; + %let y = %QgetVars(sashelp.class,sep=&); + %let z = %unquote(&y.); + + %put *%QgetVars(sashelp.class,sep=%str( & ))*; + %let y = %QgetVars(sashelp.class,sep=%str( & )); + %let z = %unquote(&y.); + + %put *%getVars(sashelp.class,sep=&)*; + %let x = %getVars(sashelp.class,sep=&); + + %put *%getVars(sashelp.class,sep=%str( & ))*; + %let x = %getVars(sashelp.class,sep=%str( & )); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + f) percent (%) as a separator [compare behaviour]: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%QgetVars(sashelp.class,sep=%)*; + %let y = %QgetVars(sashelp.class,sep=%); + %let z = %unquote(&y.); + + %put *%QgetVars(sashelp.class,sep=%str( % ))*; + %let y = %QgetVars(sashelp.class,sep=%str( % )); + %let z = %unquote(&y.); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** Case of quotes and special characters + when the quote= parameter is used: + +a) one single or double qiote: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, quote=%str(%"))*; + %put *%getVars(sashelp.class, quote=%str(%'))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + b) two single or double quotes: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %* this gives an error: ; + %* %put *%getVars(sashelp.class,quote="")*; + %* %put *%getVars(sashelp.class,quote='')*; + + %* this does not give an error: ; + %put *%QgetVars(sashelp.class,quote="")*; + %put *%QgetVars(sashelp.class,quote='')*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + c) coma separated double quote list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class,sep=%str(,),quote=%str(%"))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + d) coma separated single quote list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let x = %getVars(sashelp.class,sep=%str(,),quote=%str(%')); + %put &=x.; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 8.** Variables that start with `A` and do not end with `GHT`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data class; + set sashelp.class; + Aeight = height; +run; + +%put *%getVars(class, pattern = ^A(.*)(?>> `%QgetVars()` macro: <<< ####################### + +The getVars() and QgetVars() macro functions +allow to extract variables names form a dataset +according to a given pattern into a list. + +The getVars() returns unquoted value [by %unquote()]. +The QgetVars() returns quoted value [by %superq()]. + +The `%QgetVars()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%QgetVars( + ds + <,sep=> + <,pattern=> + <,varRange=> + <,quote=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `ds` - *Required*, the name of the dataset from + which variables are to be taken. + +* `sep = %str( )` - *Optional*, default value `%str( )`, + a variables separator on the created list. + +* `pattern = .*` - *Optional*, default value `.*` (i.e. any text), + a variable name regexp pattern, case INSENSITIVE! + +* `varRange = _all_` - *Optional*, default value `_all_`, + a named range list of variables. + +* `quote =` - *Optional*, default value is blank, a quotation + symbol to be used around values. + +### EXAMPLES AND USECASES: #################################################### + +See examples in `%getVars()` help for the details. + +--- + +## >>> `%symdelGlobal()` macro: <<< ####################### + +The `%symdelGlobal()` macro deletes all global macrovariables +created by the user. The only exceptions are read only variables +and variables the one which starts with SYS, AF, or FSP. +In that case a warning is printed in the log. + +One temporary global macrovariable `________________98_76_54_32_10_` +and a dataset, in `work` library, named `_%sysfunc(datetime(),hex7.)` +are created and deleted during the process. + +The `%symdelGlobal()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%symdelGlobal( + info +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `info` - *Optional*, default value should be empty, + if set to `NOINFO` or `QUIET` then infos and + warnings about variables deletion are suspended. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete global macrovariables, info notes + and warnings are printed in the log. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let a = 1; + %let b = 2; + %let c = 3; + %let sys_my_var = 11; + %let af_my_var = 22; + %let fsp_my_var = 33; + %global / readonly read_only_x = 1234567890; + + %put _user_; + + %symdelGlobal(); + + %put _user_; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Basic use-case two. + Delete global macrovariables in quite mode + No info notes and warnings are printed in the log. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let a = 1; + %let b = 2; + %let c = 3; + %let sys_my_var = 11; + %let af_my_var = 22; + %let fsp_my_var = 33; + %global / readonly read_only_x = 1234567890; + + %put _user_; + %put *%symdelGlobal(NOINFO)*; + %put _user_; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +--- + +## >>> `bool.` format: <<< ####################### + +The **bool** format returns: +*zero* for 0 or missing, +*one* for other values. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 & 4.2, boolean)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), bool.)`] + +--- + +## >>> `boolz.` format: <<< ####################### + +The **boolz** format returns: +*zero* for 0 or missing, +*one* for other values. + +*Fuzz* value is 0. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 & 4.2, boolean)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), boolz.)`] + +--- + +## >>> `ceil.` format: <<< ####################### + +The **ceil** format is a "wrapper" for the `ceil()` function. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 + 4.2, ceil)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), ceil.)`] + +--- + +## >>> `floor.` format: <<< ####################### + +The **floor** format is a "wrapper" for the `floor()` function. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 + 4.2, floor)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), floor.)`] + +--- + +## >>> `int.` format: <<< ####################### + +The **int** format is a "wrapper" for the `int()` function. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 + 4.2, integer)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), int.)`] + +--- + +## >>> `arrFill()` subroutine: <<< ####################### + +The **arrFill()** subroutine is a wrapper +for the Call Fillmatrix() [a special FCMP subroutine]. + +A numeric array is filled with selected numeric value, e.g. + +for array `A = [. . . .]` the subroutine +`call arrFill(42, A)` returns `A = [42 42 42 42]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrFill(N ,A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `N` - Numeric value. + +2. `A` - Numeric array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + array X[*] a b c; + + put "before: " (_all_) (=); + call arrFill(42, X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrFillC()` subroutine: <<< ####################### + +The **arrFillC()** subroutine fills +a character array with selected character value, e.g. + +for array `A = [" ", " ", " "]` the subroutine +`call arrFillC("B", A)` returns `A = ["B", "B", "B"]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrFillC(C ,A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `C` - Character value. + +2. `A` - Character array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + array X[*] $ a b c; + + put "before: " (_all_) (=); + call arrFillC("ABC", X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissFill()` subroutine: <<< ####################### + +The **arrMissFill()** subroutine fills +all missing values (i.e. less or equal than `.Z`) +of a numeric array with selected numeric value, e.g. + +for array `A = [1 . . 4]` the subroutine +`call arrMissFill(42, A)` returns `A = [1 42 42 4]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissFill(N ,A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `N` - Numeric value. + +2. `A` - Numeric array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + input a b c; +cards4; +1 . 3 +. 2 . +. . 3 +;;;; +run; + +data _null_; + set have ; + array X[*] a b c; + + put "before: " (_all_) (=); + call arrMissFill(42, X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissFillC()` subroutine: <<< ####################### + +The **arrMissFillC()** subroutine fills +all missing values of a character array +with selected character value, e.g. + +for array `A = ["A", " ", "C"]` the subroutine +`call arrMissFillC("B", A)` returns `A = ["A", "B", "C"]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissFillC(C, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `C` - Character value. + +2. `A` - Character array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + infile cards dsd dlm="," missover; + input (a b c) (: $ 1.); +cards4; +A, ,C + ,B, + , ,C +;;;; +run; + +data _null_; + set have ; + array X[*] $ a b c; + + put "before: " (_all_) (=); + call arrMissFillC("X", X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissToLeft()` subroutine: <<< ####################### + +The **arrMissToLeft()** subroutine shifts +all non-missing (i.e. greater than `.Z`) +numeric elements to the right side of an array +and missing values to the left, e.g. + +for array `A = [1 . 2 . 3]` the subroutine +`call arrMissToLeft(A)` returns `A = [. . 1 2 3]` + +All missing values are replaced with the dot (`.`) + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissToLeft(A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Numeric array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + input a b c; +cards4; +1 . 3 +. 2 . +. . 3 +;;;; +run; + +data _null_; + set have ; + array X[*] a b c; + + put "before: " (_all_) (=); + call arrMissToLeft(X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissToLeftC()` subroutine: <<< ####################### + +The **arrMissToLeftC()** subroutine shifts +all non-missing (i.e. different than empty string) +character elements to the right side of an array +and all missing values to the left, e.g. + +for array `A = ["A", " ", "B", " ", "C"]` the subroutine +`call arrMissToLeftC(A)` returns `A = [" ", " ", "A", "B", "C"]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissToLeftC(A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Character array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + infile cards dsd dlm="," missover; + input (a b c) (: $ 1.); +cards4; +A, ,C + ,B, + , ,C +;;;; +run; + +data _null_; + set have ; + array X[*] $ a b c; + + put "before: " (_all_) (=); + call arrMissToLeftC(X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissToRight()` subroutine: <<< ####################### + +The **arrMissToRight()** subroutine shifts +all non-missing (i.e. greater than `.Z`) +numeric elements to the left side of an array +and missing values to the right, e.g. + +for array `A = [1 . 2 . 3]` the subroutine +`call arrMissToRight(A)` returns `A = [1 2 3 . .]` + +All missing values are replaced with the dot (`.`) + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissToRight(A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Numeric array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + input a b c; +cards4; +1 . 3 +. 2 . +. . 3 +;;;; +run; + +data _null_; + set have ; + array X[*] a b c; + + put "before: " (_all_) (=); + call arrMissToRight(X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissToRightC()` subroutine: <<< ####################### + +The **arrMissToRightC()** subroutine shifts +all non-missing (i.e. different than empty string) +character elements to the left side of an array +and missing values to the right, e.g. + +for array `A = ["A", " ", "B", " ", "C"]` the subroutine +`call arrMissToRightC(A)` returns `A = ["A", "B", "C", " ", " "]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissToRightC(A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Character array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + infile cards dsd dlm="," missover; + input (a b c) (: $ 1.); +cards4; +A, ,C + ,B, + , ,C +;;;; +run; + +data _null_; + set have ; + array X[*] $ a b c; + + put "before: " (_all_) (=); + call arrMissToRightC(X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `catXFc()` function: <<< ####################### + +The **catXFc()** function is a wrapper +of the `catX()` function but with ability +to format character values. + +For array `A = ["a", " ", "c"]` the +`catXFc("upcase.", "*", A)` returns `"A*C"`. + +If format does not handle nulls they are ignored. + +*Caution!* Array parameters to function calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +catXFc(format, delimiter, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `format` - A name of the *character* format to be used. + +2. `delimiter` - A delimiter string to be used. + +3. `A` - Character array + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + t = "t"; + u = " "; + v = "v"; + + array b[*] t u v; + + length s $ 17; + s = catXFc("upcase.", "*", B); + put (_all_) (=); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `catXFi()` function: <<< ####################### + +The **catXFi()** function is a wrapper +of the `catX()` function but with ability +to format numeric values but +IGNORES missing values (i.e. `._`, `.`, `.a`, ..., `.z`). + +For array `A = [0, ., 2]` the +`catXFi("date9.", "#", A)` returns +`"01JAN1960#03JAN1960"` + +*Caution!* Array parameters to function calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +catXFi(format, delimiter, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `format` - A name of the *numeric* format to be used. + +2. `delimiter` - A delimiter string to be used. + +3. `A` - Numeric array + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + x = 1; + y = .; + z = 3; + + array a[*] x y z; + + length s $ 17; + s = catXFi("z5.", "#", A); + put (_all_) (=); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `catXFj()` function: <<< ####################### + +The **catXFj()** function is a wrapper +of the catX() function but with ability +to format character values. + +For array `A = ["a", " ", "c"]` the +`catXFj("upcase.", "*", A)` returns `"A**C"` + +If format does not handle nulls they are +printed as an empty string. + +*Caution!* Array parameters to function calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +catXFj(format, delimiter, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `format` - A name of the *character* format to be used. + +2. `delimiter` - A delimiter string to be used. + +3. `A` - Character array + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + t = "t"; + u = " "; + v = "v"; + + array b[*] t u v; + + length s $ 17; + s = catXFj("upcase.", "*", B); + put (_all_) (=); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `catXFn()` function: <<< ####################### + +The **catXFn()** function is a wrapper +of the `catX()` function but with ability +to format numeric values. + +For array `A = [0, 1, 2]` the +`catXFn("date9.", "#", A)` returns +`"01JAN1960#02JAN1960#03JAN1960"` + +*Caution!* Array parameters to function calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +catXFn(format, delimiter, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `format` - A name of the *numeric* format to be used. + +2. `delimiter` - A delimiter string to be used. + +3. `A` - Numeric array + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + x = 1; + y = .; + z = 3; + + array a[*] x y z; + + length s $ 17; + s = catXFn("z5.", "#", A); + put (_all_) (=); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `delDataset()` function: <<< ####################### + +The **delDataset()** function is a "wrapper" +for the `Fdelete()` function. +`delDataset()` function uses a text string with +a dataset name as an argument. + +Function checks for `*.sas7bdat`, `*.sas7bndx`, +and `*.sas7bvew` files and delete them. +Return code of 0 means dataset was deleted. + +For compound library files are +deleted from _ALL_ locations! + + +*Note:* +Currently only the BASE SAS engine datasets/views are deleted. + +Tested on Windows and Linux. Not tested on Z/OS. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +delDataset(lbds_) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `lbds_` - *Required*, character argument containing + name of the dataset/view to be deleted. + The `_last_` special name is honored. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data TEST1 TEST2(index=(x)); + x = 17; + run; + + data TEST3 / view=TEST3; + set test1; + run; + + data _null_; + p = delDataset("WORK.TEST1"); + put p=; + + p = delDataset("TEST2"); + put p=; + + p = delDataset("WORK.TEST3"); + put p=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data TEST4; + x=42; + run; + data _null_; + p = delDataset("_LAST_"); + put p=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 3.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlcreatedir; + libname user "%sysfunc(pathname(work))/user"; + + data TEST5; + x=42; + run; + + data _null_; + p = delDataset("test5"); + put p=; + run; + + libname user clear; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 4.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data TEST6; + x=42; + run; + + %put *%sysfunc(delDataset(test6))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 5.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlcreatedir; + libname L1 "%sysfunc(pathname(work))/L)1"; + libname L2 "%sysfunc(pathname(work))/L(2"; + libname L3 "%sysfunc(pathname(work))/L'3"; + + data L1.TEST7 L2.TEST7 L3.TEST7; + x=42; + run; + + libname L12 ("%sysfunc(pathname(work))/L(1" "%sysfunc(pathname(work))/L)2"); + libname L1L2 (L2 L3); + + %put *%sysfunc(delDataset(L12.test7))*; + %put *%sysfunc(delDataset(L1L2.test7))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `qsortInCbyProcProto()` proto function: <<< ####################### + +The **qsortInCbyProcProto()** is external *C* function, +this is the implementation of the *Quick Sort* algorithm. + +The function is used **internally** by +functions in the *BasePlus* package. + +Asumptions: +- smaller subarray is sorted first, +- subarrays of *size < 11* are sorted by *insertion sort*, +- pivot is selected as median of low index value, + high index value, and (low+high)/2 index value. + +`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`
+`!CAUTION! Sorted array CANNOT contains SAS missing values !`
+`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`
+ +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +qsortInCbyProcProto(arr, low, high) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `arr` - An array of double type to be sorted. + +2. `low` - An integer low index of starting position (from which the sorting is done). + +3. `high` - An integer high index of ending position (up to which the sorting is done). + + +### REFERENCES: #################################################### + +*Reference 1.* + +Insertion sort for arrays smaller then 11 elements: + +Based on the code from the following WikiBooks page [2020.08.14]: + +[https://pl.wikibooks.org/wiki/Kody_%C5%BAr%C3%B3d%C5%82owe/Sortowanie_przez_wstawianie](https://pl.wikibooks.org/wiki/Kody_%C5%BAr%C3%B3d%C5%82owe/Sortowanie_przez_wstawianie) + + +*Reference 2.* + +Iterative Quick Sort: + +Based on the code from the following pages [2020.08.14]: + +[https://www.geeksforgeeks.org/iterative-quick-sort/](https://www.geeksforgeeks.org/iterative-quick-sort/) + +[https://www.geeksforgeeks.org/c-program-for-iterative-quick-sort/](https://www.geeksforgeeks.org/c-program-for-iterative-quick-sort/) + +--- + +## >>> `fromMissingToNumberBS()` function: <<< ####################### + +The **fromMissingToNumberBS()** function +gets numeric missing value or a number +as an argument and returns an integer +from 1 to 29. + +For a numeric missing argument +the returned values are: +- 1 for `._` +- 2 for `.` +- 3 for `.a` +- ... +- 28 for `.z` and +- 29 for *all other*. + +The function is used **internally** by +functions in the *BasePlus* package. + +For *missing value arguments* the function +is an inverse of the `fromNumberToMissing()` function. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +fromMissingToNumberBS(x) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `x` - A numeric missing value or a number. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data _null_; + do x = ._, ., .a, .b, .c, 42; + y = fromMissingToNumberBS(x); + put x= y=; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `fromNumberToMissing()` function: <<< ####################### + +The **fromNumberToMissing()** function +gets a number as an argument and returns +a numeric missing value or zero. + +For a numeric argument +the returned values are: +- `._` for 1 +- `.` for 2 +- `.a` for 3 +- ... +- `.z` for 28 and +- `0` for *all other*. + +The function is used **internally** by +functions in the *BasePlus* package. + +For arguments 1,2,3, ..., and 28 the function +is an inverse of the `fromMissingToNumberBS()` function. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +fromNumberToMissing(x) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `x` - A numeric value. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data _null_; + do x = 1 to 29; + y = fromNumberToMissing(x); + put x= y=; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `quickSort4NotMiss()` subroutine: <<< ####################### + +The **quickSort4NotMiss()** subroutine is an alternative to the +`CALL SORTN()` subroutine for 1-based big arrays (i.e. `> 10'000'000` elements) +when memory used by `call sortn()` may be an issue. +For smaller arrays the memory footprint is not significant. + +The subroutine is based on an iterative quick sort algorithm +implemented in the `qsortInCbyProcProto()` *C* prototype function. + + +**Caution 1!** Array _CANNOT_ contains missing values! + +**Caution 2!** Array parameters to subroutine calls must be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +call quickSort4NotMiss(A) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Argument is a 1-based array of NOT missing numeric values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** For session with 8GB of RAM, + array of size 250'000'000 with values in range + from 0 to 99'999'999 and _NO_ missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + test[_N_] = int(100000000*rand("uniform")); + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSort4NotMiss (test); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** Resources comparison for + session with 8GB of RAM. + + Array of size 250'000'000 with random values + from 0 to 999'999'999 and _NO_ missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 8.82s + memory 1'953'470.62k + OS Memory 1'977'436.00k + + Call quickSort4NotMiss: + Sorting time 66.92s + Memory 1'954'683.06k + OS Memory 1'977'436.00k + + Call quickSortLight: + Sorting time 70.98s + Memory 1'955'479.71k + OS Memory 1'977'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `quickSortHash()` subroutine: <<< ####################### + +The **quickSortHash()** subroutine is an alternative to the +`CALL SORTN()` subroutine for 1-based big arrays (i.e. `> 10'000'000` elements) +when memory used by `call sortn()` may be an issue. +For smaller arrays the memory footprint is not significant. + +The subroutine is based on an iterative quick sort algorithm +implemented in the `qsortInCbyProcProto()` *C* prototype function. + +The number of "sparse distinct data values" is set to `100'000` to +use the hash sort instead of the quick sort. + E.g. when number of unique values for sorting is less then + 100'000 then an ordered hash table is used to store the data + and their count and sort them. + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +*Note!* Due to improper memory reporting/releasing for hash + tables in FCMP procedure the reported memory used after running + the function may not be in line with the RAM memory required + for processing. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +call quickSortHash(A) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Argument is a 1-based array of numeric values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 99'999'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(100000000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortHash (test); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 9'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(10000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortHash (test); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 3.** Resources comparison for + session with 8GB of RAM + + A) Array of size 10'000'000 with + random values from 0 to 9'999 range (sparse) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 0.61s + Memory 78'468.50k + OS Memory 101'668.00k + + Call sortn: + Sorting time 0.87s + Memory 1'120'261.53k + OS Memory 1'244'968.00k + + Call quickSortHash: + Sorting time 6.76s + Memory 1'222'242.75k(*) + OS Memory 1'402'920.00k(*) + + Call quickSortLight: + Sorting time 23.45s + Memory 80'527.75k + OS Memory 101'924.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + B) Array of size 10'000'000 with + random values from 0 to 99'999'999 range (dense) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 0.6s + Memory 78'463.65k + OS Memory 101'924.00k + + Call sortn: + Sorting time 1.51s + Memory 1'120'253.53k + OS Memory 1'244'968.00k + + Call quickSortHash: + Sorting time 6.28s + Memory 1'222'241.93k(*) + OS Memory 1'402'920.00k(*) + + Call quickSortLight: + Sorting time 0.78s + Memory 80'669.28k + OS Memory 102'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + C) Array of size 250'000'000 with + random values from 0 to 999'999'999 range (dense) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 15.34s + memory 1'953'471.81k + OS Memory 1'977'436.00k + + Call sortn: + FATAL: Insufficient memory to execute DATA step program. + Aborted during the COMPILATION phase. + ERROR: The SAS System stopped processing this step + because of insufficient memory. + + Call quickSortHash: + Sorting time 124.68s + Memory 7'573'720.34k(*) + OS Memory 8'388'448.00k(*) + + Call quickSortLight: + Sorting time 72.41s + Memory 1'955'520.78k + OS Memory 1'977'180.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + D) Array of size 250'000'000 with + random values from 0 to 99'999 range (sparse) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 16.07 + Memory 1'953'469.78k + OS Memory 1'977'180.00k + + Call sortn: + FATAL: Insufficient memory to execute DATA step program. + Aborted during the COMPILATION phase. + ERROR: The SAS System stopped processing this step + because of insufficient memory. + + Call quickSortHash: + Sorting time 123.5s + Memory 7'573'722.03k + OS Memory 8'388'448.00k + + Call quickSortLight: + Sorting time 1'338.25s + Memory 1'955'529.90k + OS Memory 1'977'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +(*) When using hash tables in `Proc FCMP` the RAM + usage is not indicated properly. The memory + allocation is reported up to the session limit + and then reused if needed. The really required + memory is in fact much less then reported. + +--- + +## >>> `quickSortHashSDDV()` subroutine: <<< ####################### + +The **quickSortHashSDDV()** subroutine is an alternative to the +`CALL SORTN()` subroutine for 1-based big arrays (i.e. `> 10'000'000` elements) +when memory used by `call sortn()` may be an issue. +For smaller arrays the memory footprint is not significant. + +The subroutine is based on an iterative quick sort algorithm +implemented in the `qsortInCbyProcProto()` *C* prototype function. + +The number of "sparse distinct data values" (argument `SDDV`) may +be adjusted to use the hash sort instead of the quick sort. + E.g. when number of unique values for sorting is less then + some *N* then an ordered hash table is used to store the data + and their count and sort them. + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +*Note!* Due to improper memory reporting/releasing for hash + tables in FCMP procedure the report memory used after running + the function may not be in line with the RAM memory required + for processing. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +call quickSortHashSDDV(A, SDDV) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Argument is a 1-based array of numeric values. + +2. `SDDV` - A number of distinct data values, e.g. 100'000. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 99'999'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(100000000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortHashSDDV (test, 2e4); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 9'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(10000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortHashSDDV (test, 2e4); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `quickSortLight()` subroutine: <<< ####################### + +The **quickSortLight()** subroutine is an alternative to the +`CALL SORTN()` subroutine for 1-based big arrays (i.e. `> 10'000'000` elements) +when memory used by `call sortn()` may be an issue. +For smaller arrays the memory footprint is not significant. + +The subroutine is based on an iterative quick sort algorithm +implemented in the `qsortInCbyProcProto()` *C* prototype function. + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +call quickSortLight(A) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Argument is a 1-based array of numeric values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 99'999'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(100000000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortLight (test); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** Resources comparison for + session with 8GB of RAM. + + Array of size 250'000'000 with random values + from 0 to 999'999'999 and _NO_ missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 8.82s + memory 1'953'470.62k + OS Memory 1'977'436.00k + + Call quickSort4NotMiss: + Sorting time 66.92s + Memory 1'954'683.06k + OS Memory 1'977'436.00k + + Call quickSortLight: + Sorting time 70.98s + Memory 1'955'479.71k + OS Memory 1'977'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 3.** Resources comparison for + session with 8GB of RAM + + A) Array of size 10'000'000 with + random values from 0 to 9'999 range (sparse) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 0.61s + Memory 78'468.50k + OS Memory 101'668.00k + + Call sortn: + Sorting time 0.87s + Memory 1'120'261.53k + OS Memory 1'244'968.00k + + Call quickSortHash: + Sorting time 6.76s + Memory 1'222'242.75k(*) + OS Memory 1'402'920.00k(*) + + Call quickSortLight: + Sorting time 23.45s + Memory 80'527.75k + OS Memory 101'924.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + B) Array of size 10'000'000 with + random values from 0 to 99'999'999 range (dense) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 0.6s + Memory 78'463.65k + OS Memory 101'924.00k + + Call sortn: + Sorting time 1.51s + Memory 1'120'253.53k + OS Memory 1'244'968.00k + + Call quickSortHash: + Sorting time 6.28s + Memory 1'222'241.93k(*) + OS Memory 1'402'920.00k(*) + + Call quickSortLight: + Sorting time 0.78s + Memory 80'669.28k + OS Memory 102'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + C) Array of size 250'000'000 with + random values from 0 to 999'999'999 range (dense) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 15.34s + memory 1'953'471.81k + OS Memory 1'977'436.00k + + Call sortn: + FATAL: Insufficient memory to execute DATA step program. + Aborted during the COMPILATION phase. + ERROR: The SAS System stopped processing this step + because of insufficient memory. + + Call quickSortHash: + Sorting time 124.68s + Memory 7'573'720.34k(*) + OS Memory 8'388'448.00k(*) + + Call quickSortLight: + Sorting time 72.41s + Memory 1'955'520.78k + OS Memory 1'977'180.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + D) Array of size 250'000'000 with + random values from 0 to 99'999 range (sparse) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 16.07 + Memory 1'953'469.78k + OS Memory 1'977'180.00k + + Call sortn: + FATAL: Insufficient memory to execute DATA step program. + Aborted during the COMPILATION phase. + ERROR: The SAS System stopped processing this step + because of insufficient memory. + + Call quickSortHash: + Sorting time 123.5s + Memory 7'573'722.03k + OS Memory 8'388'448.00k + + Call quickSortLight: + Sorting time 1'338.25s + Memory 1'955'529.90k + OS Memory 1'977'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +(*) When using hash tables in `Proc FCMP` the RAM + usage is not indicated properly. The memory + allocation is reported up to the session limit + and then reused if needed. The really required + memory is in fact much less then reported. + +--- + +## >>> `%dedupListS()` macro: <<< ####################### + +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: <<< ####################### + +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: <<< ####################### + +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: <<< ####################### + +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: <<< ####################### + +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.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `brackets.` format: <<< ####################### + +The **brackets** format adds brackets around a text or a number. +Leading and trailing spaces are dropped before adding brackets. + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + input x; + if x < 0 then put x= brackets.; + else put x= best32.; +cards; +2 +1 +0 +-1 +-2 +; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `semicolon.` format: <<< ####################### + +The **semicolon** format adds semicolon after text or number. +Leading and trailing spaces are dropped before adding semicolon. + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + x = 1; + y = "A"; + put x= semicolon. y= $semicolon.; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `bracketsC()` function: <<< ####################### + +The **bracketsC()** function is internal function used by the *brackets* format. +Returns character value of length 32767. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +bracketsC(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Character value. + +--- + +## >>> `bracketsN()` function: <<< ####################### + +The **bracketsN()** function is internal function used by the *brackets* format. +Returns character value of length 34. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +bracketsN(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Numeric value. + +--- + +## >>> `semicolonC()` function: <<< ####################### + +The **semicolonC()** function is internal function used by the *semicolon* format. +Returns character value of length 32767. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +semicolonC(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Character value. + +--- + +## >>> `semicolonN()` function: <<< ####################### + +The **semicolonN()** function is internal function used by the *semicolon* format. +Returns character value of length 33. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +semicolonN(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Numeric value. + +--- + +## >>> `%QzipEvalf()` macro: <<< ####################### + +The zipEvalf() and QzipEvalf() macro functions +allow to use a function on elements of pair of +space separated lists. + +For two space separated lists of text strings the corresponding +elements are taken and the macro applies a function, provided by user, +to calculate result of the function on taken elements. + +When one of the lists is shorter then elements are "reused" starting +from the beginning. + +The zipEvalf() returns unquoted value [by %unquote()]. +The QzipEvalf() returns quoted value [by %superq()]. + +See examples below for the details. + +The `%QzipEvalf()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%QzipEvalf( + first + ,second + <,function=> + <,operator=> + <,argBf=> + <,argMd=> + <,argAf=> + <,format=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `first` - *Required*, a space separated list of texts. + +2. `second` - *Required*, a space separated list of texts. + +* `function = cat` - *Optional*, default value is `cat`, + a function which will be applied + to corresponding pairs of elements of + the first and the second list. + +* `operator =` - *Optional*, default value is empty, + arithmetic infix operator used with elements + the first and the second list. The first + list is used on the left side of the operator + the second list is used on the right side + of the operator. + +* `argBf =` - *Optional*, default value is empty, + arguments of the function inserted + *before* elements the first list. + If multiple should be comma separated. + +* `argMd =` - *Optional*, default value is empty, + arguments of the function inserted + *between* elements the first list and + the second list. + If multiple should be comma separated. + +* `argAf =` - *Optional*, default value is empty, + arguments of the function inserted + *after* elements the second list. + If multiple should be comma separated. + +* `format=` - *Optional*, default value is empty, + indicates a format which should be used + to format the result, does not work when + the `operator=` is used. + +### EXAMPLES AND USECASES: #################################################### + +See examples in `%zipEvalf()` help for the details. + +--- + +## >>> `%zipEvalf()` macro: <<< ####################### + +The zipEvalf() and QzipEvalf() macro functions +allow to use a function on elements of pair of +space separated lists. + +For two space separated lists of text strings the corresponding +elements are taken and the macro applies a function, provided by user, +to calculate result of the function on taken elements. + +When one of the lists is shorter then elements are "reused" starting +from the beginning. + +The zipEvalf() returns unquoted value [by %unquote()]. +The QzipEvalf() returns quoted value [by %superq()]. + +See examples below for the details. + +The `%zipEvalf()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%zipEvalf( + first + ,second + <,function=> + <,operator=> + <,argBf=> + <,argMd=> + <,argAf=> + <,format=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `first` - *Required*, a space separated list of texts. + +2. `second` - *Required*, a space separated list of texts. + +* `function = cat` - *Optional*, default value is `cat`, + a function which will be applied + to corresponding pairs of elements of + the first and the second list. + +* `operator =` - *Optional*, default value is empty, + arithmetic infix operator used with elements + the first and the second list. The first + list is used on the left side of the operator + the second list is used on the right side + of the operator. + +* `argBf =` - *Optional*, default value is empty, + arguments of the function inserted + *before* elements the first list. + If multiple should be comma separated. + +* `argMd =` - *Optional*, default value is empty, + arguments of the function inserted + *between* elements the first list and + the second list. + If multiple should be comma separated. + +* `argAf =` - *Optional*, default value is empty, + arguments of the function inserted + *after* elements the second list. + If multiple should be comma separated. + +* `format=` - *Optional*, default value is empty, + indicates a format which should be used + to format the result, does not work when + the `operator=` is used. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple concatenation of elements: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, q w e r t y); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Shorter list is "reused": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, a b c); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Use of the `operator=`, shorter list is "reused": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let y = %zipEvalf(1 2 3 4 5 6, 100 200, operator = +); +%put &=y; + +%let z = %zipEvalf(1 2 3 4 5 6 8 9 10, 1 2 3 4 5 6 8 9 10, operator = **); +%put &=z; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Format result: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, q w e r t y, format=$upcase.); +%put &=x; + +%put * +%zipEvalf( + ą ż ś ź ę ć ń ó ł +,Ą Ż Ś Ź Ę Ć Ń Ó Ł +,format = $brackets. +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** Use with macrovariables: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let abc = 10 100 1000; +%put * +%zipEvalf( +%str(1 2 3 4 5 6 7 8 9) +,&abc. +,function = sum +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** If one of elements is empty: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put * +%zipEvalf( + abc efg +, +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** Use of the `function=`, shorter list is "reused": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put * +%zipEvalf( + a b c +,efg +,function = catx +,argBf = %str(,) +,format = $brackets. +) +*; + +%put * +%zipEvalf( + a b c +,efg +,function = catx +,argBf = %str( ) +,format = $upcase. +) +*; + +%put * +%zipEvalf( + %str(! @ # $ [ ] % ^ & * ) +,1 2 3 4 5 6 7 8 9 +,function = catx +,argBf = %str( ) +,format = $quote. +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 8.** Use inside resolve: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; +z = resolve(' +%zipEvalf( + %nrstr(! @ # $ [ ] % ^ & *) +,1 2 3 4 5 6 7 8 9 +,function = catx +,argBf = %str(.) +,format = $quote. +)'); +put z=; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 9.** Use in data step: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test; + %zipEvalf( + a b c d e f g + ,1 2 3 4 5 6 7 + ,function = catx + ,argBf = = + ,format = $semicolon. + ) +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 10.** With 9.4M6 hashing() function: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %zipEvalf(MD5 SHA1 SHA256 SHA384 SHA512 CRC32, abcd, function = HASHING); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 11.** Use middle argument: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, 2020, argMd=5, function=MDY, format=date11.); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%functionExists()` macro: <<< ####################### + +The functionExists() macro function tests +if given funcion exists in the SAS session. +The `sashelp.vfunc` view is used. + +See examples below for the details. + +The `%functionExists()` macro executes like a pure macro code. + +The function is a result of cooperation with [Allan Bowe](https://www.linkedin.com/in/allanbowe/) + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%functionExists( + funName +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `funName` - *Required*, the name of the function + existence of which you are testing. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Test if function exists: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %functionExists(HASHING); + + %put %functionExists(COSsinLOG); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%RainCloudPlot()` macro: <<< ####################### + +The RainCloudPlot() macro allow to plot Rain Cloud plots, i.e. pots of +kernel density estimates, jitter data values, and box-and-whiskers plot. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%RainCloudPlot( + DS + ,gr + ,vars + + <,WidthPX=> + <,HeightPX=> + <,boxPlot=> + <,roundFactor=> + <,rainDropSize=> + <,boxPlotSymbolSize=> + <,colorsList=> + <,monochrome=> + <,antialiasMax=> + <,title=> + <,footnote=> + <,catLabels=> + <,xLabels=> + <,catLabelPos=> + <,xLabelPos=> + <,catLabelAttrs=> + <,xLabelAttrs=> + <,formated=> + <,y2axis=> + <,y2axisLevels=> + <,y2axisValueAttrs=> + <,catAxisValueAttrs=> + <,xaxisValueAttrs=> + <,xaxisTickstyle=> + <,sganno=> + <,odsGraphicsOptions=> + <,sgPlotOptions=> + + <,VSCALE=> + <,KERNEL_K=> + <,KERNEL_C=> + + <,cleanTempData=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `DS` - *Required*, name of the dataset from + which variables are to be taken. + +2. `gr` - *Required*, name of the grouping variable. + When more than one variable is specified + separate plots are rendered. + Can be numeric or character. + +3. `vars` - *Required*, name of the aggregated numeric variable. + When more than one variable is specified + separate plots are rendered. + +***Plot related options***: + +* `WidthPX` - *Optional*, default value `1200`. + Total width of the plot in pixels. + +* `HeightPX` - *Optional*, default value `220`. + Partial height of the plot in pixels. + Total height is calculated as `#GROUPS x HeightPX`. + +* `boxPlot` - *Optional*, default value `1`. + Indicates if the Box Plot should be added. + +* `roundFactor` - *Optional*, default value `0.000001`. + Rounding level when calculating maximum value + of the cloud chart. Should be adjusted to data + granularity level, e.g. for data with value + around `1e-8` should be decreased. + +* `rainDropSize` - *Optional*, default value `5px`. + Size of data points in the "rain" plot. + +* `boxPlotSymbolSize` - *Optional*, default value `8px`. + Size of symbols on the box plot. + +* `colorsList` - *Optional*, default value is empty. + List of colours for plotting. + Empty indicates that the default list will be used. + +* `monochrome` - *Optional*, default value `0`. + Indicates if the default list of colours should be gray-scale. + +* `antialiasMax` - *Optional*, default value is empty. + Sets a value to the ODS graphics `ANTIALIASMAX` option. + When empty the value is calculated from data. + +* `title` - *Optional*, default value - see notes below. + Provides a list of titles printed on the plot. + For details see notes below. + +* `footnote` - *Optional*, default value - see notes below. + Provides a list of titles printed on the plot. + For details see notes below. + +* `catLabels` - *Optional*, default value is empty. + List of values for group axix labels (vertical). + When empty a grouping variable name is used. + For details see notes below. + +* `xLabels` - *Optional*, default value is empty. + List of values for data variable axix labels (horizontal). + When empty a data variable name is used. + For details see notes below. + +* `catLabelPos` - *Optional*, default value `DATACENTER`. + Indicates position of the label on group axix (vertical). + Allowed values are `BOTTOM`, `CENTER`, `DATACENTER`, and `TOP`. + +* `xLabelPos` - *Optional*, default value `DATACENTER`. + Indicates position of the label on data axix (horizontal). + Allowed values are `LEFT`, `CENTER`, `DATACENTER`, and `RIGHT`. + +* `catLabelAttrs` - *Optional*, default value is empty. + List of attributes for group axix labels (vertical). + For details see notes below. + +* `xLabelAttrs` - *Optional*, default value is empty. + List of attributes for data variable axix labels (horizontal). + For details see notes below. + +* `formated` - *Optional*, default value `0`. + Indicates if values of the grouping variable should be formated. + +* `y2axis` - *Optional*, default value `1`. + Indicates if the right vertical axix should be displayed. + +* `y2axisLevels` - *Optional*, default value `4`. + Indicates if the number of expected levels of values printed + on the right vertical axix. + +* `y2axisValueAttrs` - *Optional*, default value `Color=Grey`. + Allows to modify Y2 axis values attributes. + +* `catAxisValueAttrs` - *Optional*, default value `Color=Black`. + Allows to modify category (Y) axis values attributes. + +* `xaxisValueAttrs` - *Optional*, default value `Color=Grey`. + Allows to modify X axis values attributes. + +* `xaxisTickstyle` - *Optional*, default value `INSIDE`. + Allows to modify X axis tick style. + Allowed values are `OUTSIDE`, `INSIDE`, `ACROSS`, and `INBETWEEN`. + *For SAS previous to* **9.4M5** *set to missing!* + +* `sganno` - *Optional*, default value is empty. + keeps name of a data set for the `sganno=` option + of the SGPLOT procedure. + +* `sgPlotOptions` - *Optional*, default value is `noautolegend noborder`. + List of additional options values for SGPLOT procedure. + +* `odsGraphicsOptions` - *Optional*, default value is empty. + List of additional options values for `ODS Graphics` statement. + By default only the: `width=`, `height=`, and `antialiasmax=` + are modified. + + +***Stat related options***: + +* `VSCALE` - *Optional*, default value `Proportion`. + Specifies the scale of the vertical axis. + Allowed values are `PROPORTION`, `PERCENT`, and `COUNT`. + `PROPORTION` scales the data in units of proportion of observations per data unit. + `PERCENT` scales the data in units of percent of observations per data unit. + `COUNT` scales the data in units of the number of observations per data unit. + +* `KERNEL_K` - *Optional*, default value `NORMAL`. + Specifies type of kernel function to compute kernel density estimates. + Allowed values are `NORMAL`, `QUADRATIC`, and `TRIANGULAR`. + + +* `KERNEL_C` - *Optional*, default value `1`. + Specifies standardized bandwidth parameter *C* to compute kernel density estimates. + Allowed values are between `0` and `1`, + +***Other options***: + +* `cleanTempData` - *Optional*, default value `1`. + Indicates if temporary data sets should be deleted. + +--- + +### NOTES: ################################################################### + +* Default value of the `title` option is: + `%nrstr(title1 JUSTIFY=C "Rain Cloud plot for &list_g. by " %unquote(&xLabel.);)` + Use the `%str()` or `%nrstr()` macro-function to handle special characters. + The `%unquote()` is used when resolving the parameter. + +* Default value of the `footnote` option is: + `%nrstr(footnote1 JUSTIFY=L COLOR=lightGray HEIGHT=1 "by RainCloudPlot macro from the BasePlus package";)` + Use the `%str()` or `%nrstr()` macro-function to handle special characters. + The `%unquote()` is used when resolving the parameter. + +* The `catLabels` and `xLabels` should be quoted comma separated lists enclosed with brackets, + e.g. `catLabels=("Continent of Origin", "Car Type")`, see Example below. + +* The `catLabelAttrs` and `xLabelAttrs` should be space separated lists of `key=value` pairs, + e.g. `xLabelAttrs=size=12 color=Pink weight=bold`, see Example below. + +* Kernel density estimates and basic statistics are calculated with `PROC UNIVARIATE`. + +* Plot is generated by `PROC SGPLOT` with `BAND`, `SCATTE`, and `POLYGON` plots. + +* After execution the ODS graphics dimension parameters are set to `800px` by `600px`. + +* SAS notes (`NOTE:`) are disabled for the execution time. + +* List of predefined colours is: + `BlueViolet`, `RoyalBlue`, `OliveDrab`, `Gold`, `HotPink`, `Crimson`, + `MediumPurple`, `CornflowerBlue`, `YellowGreen`, `Goldenrod`, `Orchid`, `IndianRed`. + +### BOX-AND-WHISKERS PLOT: ################################################################### + +The box-and-whiskers plot has the following interpretation: +- left vertical bar indicates the minimum, +- left whisker line starts at `max(Q1 - 1.5IQR, minimum)` and ends at lower quartile (Q1), +- diamond indicates mean, +- vertical bar inside of the box indicates median, +- right whisker line starts at upper quartile (Q3) and ends at `min(Q3 + 1.5IQR, maximum)`, +- right vertical bar indicates the maximum. + +With above setup it may happen that +there is a gap between the minimum marker and the beginning of the left whisker +or +there is a gap between the end of the right whisker and the maximum marker. +See examples below. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple Rain Cloud Plot for a `have` dataset: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + + data have; + g = "Aaa"; + do _N_ = 1 to 50; + x = rannor(42); + output; + end; + + g = "Bb"; + do _N_ = 1 to 120; + select (mod(_N_,9)); + when(1,2,3,4,5) x = 0.5*rannor(42)+1; + when(6,7,8) x = 0.5*rannor(42)+3; + otherwise x = 0.5*rannor(42)+5; + end; + output; + end; + + g = "C"; + do _N_ = 1 to 60; + x = 3*rannor(42)+7; + output; + end; + run; + + %RainCloudPlot(have, g, x) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The output: +![Example 1](./baseplus_RainCloudPlot_Ex1.png) + + + +**EXAMPLE 2.** Rain Cloud plot for `sashelp.cars` dataset + with groups by Origin or Type + for Invoice variables: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + + %RainCloudPlot( + sashelp.cars(where=(Type ne "Hybrid")) + , Origin Type + , Invoice + , HeightPX=300 + , y2axisLevels=3 + , catLabels=("Continent of Origin", "Car Type") + , xLabels="Invoice, [$]" + , xLabelAttrs=size=12 color=Pink weight=bold + ) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The output: +![Example 2a](./baseplus_RainCloudPlot_Ex2a.png) +![Example 2b](./baseplus_RainCloudPlot_Ex2b.png) + + + +**EXAMPLE 3.** Rain Cloud plot with formatted groups + and annotations. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + + data annotation; + function="text"; + label="This graph is full(*ESC*){sup '2'} of annotations!"; + drawspace="graphpercent"; + rotate=30; + anchor="center"; + textsize=32; + x1=50; + y1=50; + textcolor="red"; + justify="center"; + textweight="bold"; + width=100; + widthunit="percent"; + run; + + proc format; + value system + 1="Windows" + 2="MacOS" + 3="Linux" + ; + run; + + data test; + do system = 1 to 3; + do i = 1 to 50; + x = rannor(123)/system; + output; + end; + end; + format system system.; + run; + + + %RainCloudPlot(test, system, x + , colorslist=CX88CCEE CX44AA99 CX117733 + , formated=1 + , sganno=annotation + , sgPlotOptions=noborder + , WidthPX=1000 + , HeightPX=320 + , catAxisValueAttrs=Color=Green weight=bold + ) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The output: +![Example 3](./baseplus_RainCloudPlot_Ex3.png) + +--- + +## >>> `%zipLibrary()` macro: <<< ####################### + +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: <<< ####################### + +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) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%LDSN()` macro: <<< ####################### + +The LDSN (Long DataSet Names) macro function +allows to use an "arbitrary" text string to name a dataset. + +The LDSN macro has some limitation described below, to overcome them +another macro, with different name: LDSNM (Long DataSet Names Modified) +was created. See its description to learn how to use it. + +--- + +The idea for the macro came from the following story: + +Good friend of mine, who didn't use SAS for quite some time, +told me that he lost a few hours for debugging because +he forgot that the SAS dataset name limitation is 32 bytes. + +I replied that it shouldn't be a problem to do a workaround +for this inconvenience with a macro and the `MD5()` hashing function. + +I said: *The macro should take an "arbitrary string" for a dataset +name, convert it, with help of `MD5()`, to a hash digest, and +create a dataset with an "artificial" `hex16.` formated name.* + +Starting with something like this: + +~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSN(work. peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s (drop = sex rename=(name=first_name) where = (age in (12,13,14))) ); + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~ + +the macro would do: + +~~~~~~~~~~~~~~~~~~~~~~~sas +%sysfunc(MD5(peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s), hex16.) +~~~~~~~~~~~~~~~~~~~~~~~ + +and (under the hood) return and execute the following code: + +~~~~~~~~~~~~~~~~~~~~~~~sas +data work.DSN_41D599EF51FBA58_(drop = sex rename=(name=first_name) where = (age in (12,13,14))) ; + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~ + +Also in the next data step user should be able to do: + +~~~~~~~~~~~~~~~~~~~~~~~sas +data my_next_data_step; + set %DSN(work. peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s); +run; +~~~~~~~~~~~~~~~~~~~~~~~ + +and work without the "dataset-name-length-limitation" issue. + +--- + +See examples below for the details. + +The `%LDSN()` macro executes like a pure macro code. + +**Known "Limitations":** + +- dataset name _cannot_ contain dots (`.`) since they are used as separators! + +- dataset name _cannot_ contain round brackets(`(` and `)`) since they are used as separators + (but `[]` and `{}` are allowed)! + +- dataset name _cannot_ contain unpaired quotes (`'` and `"`), + text: `a "hot-dog"` is ok, but `John's dog` is not! + +**Behaviour:** + +- dataset name text is *converted to upcase* + +- dataset name text *leading and trailing spaces are ignored*, + e.g. the following will give the same hash digest: + `%ldsn(work.test)`, `%ldsn( work.test)`, `%ldsn(work.test )`, + `%ldsn(work .test)`, `%ldsn(work. test)`, `%ldsn(work . test)`. + +- macro calls of the form: + `data %LDSN(); run;`, `data %LDSN( ); run;`, `data %LDSN( . ); run;` or even + `data %LDSN( . (keep=x)); run;` are resolved to empty string, so the result is + equivalent to `data; run;` + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%LDSN( + arbitrary text string (in line with limitations) +) +~~~~~~~~~~~~~~~~~~~~~~~ + +The text string is concider as *"fully qualified dataset name"*, i.e. macro +assumes it may contain library as prefix and data set options as sufix. +See the `%LDsNm()` macro for comparison. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options nomprint source nomlogic nosymbolgen ls = max ps = max; + +data %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s (drop = sex rename=(name=first_name) where = (age in (12,13,14))) ); + set sashelp.class; +run; + +proc print data = %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ); +run; + +data MyNextDataset; + set %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ); + where age > 12; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%LDSNM()` macro: <<< ####################### + +The LDSNM (Long DataSet Names Modified) macro function +allows to use an "arbitrary" text string to name a dataset. + +The LDSN macro had some limitation (see its documentation), to overcome them +another `%LDSNM()` (Long DataSet Names Modified) macro was created. + +The main idea behind the `%LDSNM()` is the same as for `%LDSN()` - see the description there. + +--- + +The `%LDSNM()` macro works differently than the `%LDSN()` macro. + +The `%LDSN()` macro assumes that *both* libname and dataset options *are* +be passed as elements **inside** the macro argument, together with the data set name. E.g. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSN( WORK.peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s (drop = sex) ); + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The `%LDSNM()` macro, in contrary, assumes that both libname and dataset options are +passed **outside** the macro parameter, i.e. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data WORK.%LDSNM( peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s ) (drop = sex); + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This approach overcomes some limitations the LDSN has. + +The **additional** feature of the `%LDSNM()` is that when the macro is called, +a global macrovariable is created. +The macro variable name is the text of the hashed data set name. +The macro variable value is the text of the unhashed data set name (i.e. the argument of the macro). +For example the following macro call: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSNM(John "x" 'y' dog); + set sashelp.class; + where name = 'John'; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +creates macro variable with name `DSN_BF1F8C4D6495B34A_` and with value: `JOHN "X" 'Y' DOG`. + +The macrovariable is useful when combined with `symget()` function and +the `indsname=` option to get the original text string value back, +like in this example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test; + set %LDSNM(John "x" 'y' dog) indsname = i; + + indsname = symget(scan(i,-1,".")); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +See examples below for the details. + +--- + +The `%LDSN()` macro executes like a pure macro code. + +**Known "Limitations":** + +- dataset name _cannot_ contain _unpaired_ round brackets(`(` and `)`) + (but unmatched `[]` and `{}` are allowed)! + +- dataset name _cannot_ contain _unpaired_ quotes (`'` and `"`), + text: `a "hot-dog"` is ok, but `John's dog` is not! + +**Behaviour:** + +- dataset name text is *converted to upcase* + +- dataset name text *leading and trailing spaces are ignored*, + e.g. the following will give the same hash digest: + `%ldsn(test)`, `%ldsn( test)`, `%ldsn(test )`. + +- macro calls of the form: + `data %LDSN(); run;` or `data %LDSN( ); run;` are resolved + to empty string, so the result is equivalent to `data; run;` + +- created macrovariable is _global_ in scope. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%LDSNM( + arbitrary text string (in line with limitations) +) +~~~~~~~~~~~~~~~~~~~~~~~ + +The text string is considered as *"only dataset name"*, i.e. the macro does not +assume it contains library as prefix or data set options as suffix. +See the `%LDSN()` macro for comparison. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSNM(John "x" 'y' & dog); + set sashelp.class; + where name = 'John'; +run; + +data %LDSNM(John "x"[ 'y' & dog); + set sashelp.class; + where name = 'John'; +run; + +data %LDSNM(John "x" 'y'} & dog); + set sashelp.class; + where name = 'John'; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data work.%LDsNm( peanut butter & jelly, a hot-dog in [a box], and s(*)t(*)a(*)r(*)s!! ) (drop = sex rename=(name=first_name) where = (age in (12,13,14))) +; + set sashelp.class; +run; + +data test; + set work.%LDsNm( peanut butter & jelly, a hot-dog in [a box], and s(*)t(*)a(*)r(*)s!! ) indsname=i; + + indsname=symget(scan(i,-1,".")); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data work.%LDsNm( . ); + set sashelp.class; +run; + +data %LDsNm( ); + set sashelp.class; +run; + + +data %LDsNm(); + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%LVarNm()` macro: <<< ####################### + +The LVarNm() macro function works like the LDSN() macro function, but for variables. +Supported by LVarNmLab() macro function which allows to remember "user names" in labels. + +The motivation for the macro was similar to that for the LDSN() macro. + +--- + +See examples below for the details. + +The `%LVarNm()` macro executes like a pure macro code. + +**Known "Limitations":** + +- variable name _cannot_ contain unpaired quotes (`'` and `"`), + text: `a "hot-dog"` is ok, but `John's dog` is not! + +**Behaviour:** + +- variable name text is *converted to upcase* + +- variable name text *leading and trailing spaces are ignored*, + e.g. the following will give the same hash digest: + `%LVarNm(test)`, `%LVarNm( test)`, `%LVarNm(test )`. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%LVarNm( + arbitrary text string (in line with limitations) +) +~~~~~~~~~~~~~~~~~~~~~~~ + +--- + + +### EXAMPLES AND USE CASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options ls=max; +data test; + %LVarNmLab( peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ) + + do %LVarNm( peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ) = 1 to 10; + + y = 5 + %LVarNm( peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ) * 17; + output; + end; +run; + +data test2; + set test; + where %LVarNm( peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ) < 5; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test3; + %LVarNmLab() = 17; + + %LVarNm() = 17; + + %LVarNm( ) = 42; + + %LVarNm( ) = 303; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test3; + %LVarNm(test) = 1; + + %LVarNm( test) = 2; + + %LVarNm(test ) = 3; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test4; + array X[*] %LVarNm(some strange! name)_0 - %LVarNm(some strange! name)_10; + + do i = lbound(X) to hbound(X); + X[i] = 2**(i-1); + put X[i]=; + end; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +## >>> `%LVarNmLab()` macro: <<< ####################### + +The LVarNmLab() macro function supports LVarNm() and allows to remember "user names" in labels. + +The motivation for the macro was similar one as for the LDSN() macro. + +--- + +See examples in LVarNm() documentation for the details. + +The `%LVarNmLab()` macro executes like a pure macro code. + +**Known "Limitations":** + +- variable name _cannot_ contain unpaired quotes (`'` and `"`), + text: `a "hot-dog"` is ok, but `John's dog` is not! + +**Behaviour:** + +- variable name text is *converted to upcase* + +- variable name text *leading and trailing spaces are ignored*, + e.g. the following will give the same hash digest: + `%LVarNmLab(test)`, `%LVarNmLab( test)`, `%LVarNmLab(test )`. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%LVarNmLab( + arbitrary text string (in line with limitations) +) +~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%bpPIPE()` macro: <<< ####################### + +The bpPIPE() [Base Plus PIPE] macro executes OS command +and print to the log output of the execution. + +Under the hood it uses `_` filename reference to PIPE device. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%bpPIPE( ) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +* **NO Arguments** - Everything inside brackets is treated as an OS command. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** List, to the log, content of D and C drives: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %bpPIPE(D: & dir & dir "C:\") +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** List, to the log, content of `home` directory: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %bpPIPE(ls -halt ~/) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%dirsAndFiles()` macro: <<< ####################### + +The `%dirsAndFiles()` macro allows to extract info about all files +and subdirectories of a given `root` directory. + +The extracted info may be just a list of files and subdirectories or, if +the `details=` parameter is set to 1, additional operating system information +is extracted (information is OSS dependent and gives different results for Linux +and for Windows) + +The extracted info can be narrowed down to files (`keepFiles=1`) or to +directories (`keepDirs=1`) if need be. + +The extracted info can be presented in wide or long format (`longFormat=1`). + +The extracted info for files can be narrowed down to only files with particular +extension, for example: `fileExt=sas7bdat`. + +The extracted info can be narrowed down maximal path depth +by setting up the `maxDepth=` parameter. + +See examples below for the details. + +### REFERENCES: ################################################################### + +The macro is based on Kurt Bremser's "*Talking to Your Host*" article +presented at WUSS 2022 conference. + +The article is available [here](https://communities.sas.com/t5/SAS-User-Groups-Library/WUSS-Presentation-Talking-to-Your-Host/ta-p/838344) +and also as an additional content of this package. +The paper was awarded the "Best Paper Award - Programming". + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles( + root + <,ODS=> + <,details=> + <,keepDirs=> + <,keepFiles=> + <,longFormat=> + <,fileExt=> + <,maxDepth=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `root` - *Required*, path to be searched + for information. + +* `ODS=work.dirsAndFilesInfo` - *Optional*, output data set, + name of a dataset to store information. + +* `details=0` - *Optional*, indicates if detailed info + will be collected, `1` = yes, `0` = no. + +* `keepDirs=1` - *Optional*, indicates if directories info + will be collected, `1` = yes, `0` = no. + +* `keepFiles=1` - *Optional*, indicates if files info + will be collected, `1` = yes, `0` = no. + +* `longFormat=0` - *Optional*, indicates if output be + in long format, `1` = yes, `0` = no. + +* `fileExt=` - *Optional*, if not missing then indicates + file extension to filter out results. + +* `maxDepth=0` - *Optional*, if not zero then indicates + maximum depth of search in the root path. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Get list of files and directories: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Get detailed info: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result2,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Get only files info: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result3,keepDirs=0) + +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result5,keepDirs=0,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Get only directories info: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result4,keepFiles=0) + +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result6,keepFiles=0,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** Filter out by `sas` extension: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(~/,ODS=work.result7,fileExt=sas) + +%dirsAndFiles(~/,ODS=work.result8,fileExt=sas,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** Keep result in the long format: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(~/,ODS=work.result9,details=1,longFormat=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** Get info for maximum depth of 2: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result10,details=1,maxDepth=2) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 8.** How locked/unavailable files are handled: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(%sysfunc(pathname(WORK)),ODS=work.result11,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 9.** Not existing directory: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(%sysfunc(pathname(WORK))/noSuchDir,ODS=work.result12,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%repeatTxt()` macro: <<< ####################### + +The repeatTxt() macro function allows to repeat `n` +times a `text` string separated by string `s=`. + +The repeatTxt() returns unquoted value [by %unquote()]. + +See examples below for the details. + +The `%repeatTxt()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%repeatTxt( + text + <,n> + <,s=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `text` - *Required*, a text to be repeated. + +2. `n` - *Required/Optional*, the number of repetitions. + If missing then set to `1`; + +* `s = %str( )` - *Optional*, it is a separator between + repeated elements. Default value is space. +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple repetition of dataset name: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options mprint; +data work.test5; + set + %repeatTxt(sashelp.cars, 5) + ; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Simple repetition of data step: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options mprint; +%repeatTxt(data _null_; set sashelp.cars; run;, 3) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** "Nice" output: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Macroquote a text with commas: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%repeatTxt( + %str(proc sql; create table wh as select weight,height from sashelp.class; quit;) + ,3 +) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 5.** Empty `n` repeats `text` one time: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options mprint; +data work.test1; + set + %repeatTxt(sashelp.cars) + ; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 6.** Dynamic "formatting": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%macro printWork(); + %let work=%sysfunc(pathname(work)); + %put +%repeatTxt(~,%length(&work.)+5,s=)+; + %put {&=work.}; + %put +%repeatTxt(~,%length(&work.)+5,s=)+; +%mend printWork; + +%printWork() +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%repList()` macro: <<< ####################### + +The repList() macro function allows to repeat `T` +times elements of a `L` list, possibly `E` times each element, +separated by string `S`. + +See examples below for the details. + +The `%repList()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%repList( + list + <,times=> + <,each=> + <,lenghtOut=> + <,sep=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - *Required*, a list of elements to be repeated. + List can be space or comma separated. + Elements can be in quotes. + For comma separated list add brackets + e.g., `%repList((A,B,C,D),times=5)`. + The list separators are: `<{[( ,;)]}>`. + +* `times=` - *Optional*, An integer indicating + the number of repetitions. + By default set to `1`. + + +* `each=` - *Optional*, A list of integers indicating + the number of repetitions of each element of the list + e.g., for a list `A B C` and the `each=2 4` the result + is `A A B B B B C C`. If the number of integers is less + then the length of the list values are recycled from + the beginning. + By default set to `1`. + +* `lenghtOut=` - *Optional*, An integer indicating + after what the number of repetitions process will stop. + By default set to `0` which means "do not stop". + +* `sep=` - *Optional*, it is a separator printed between + repeated elements. Mnemonics for *space* is `s`, + for *comma* is `c`, and for semicolon in `q`. + Default value is a single space. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple repetition of all elements: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repList((A,B,C,D), times=3); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Simple repetition of each element: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repList(("A",'B',"C",'D'), each=3); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Simple repetition with a separator: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repList(A10;B20;C30, times=3, each=2, sep=Q); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Recycle elements up to 8 with a comma as a separator: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repList(1 2 3, lenghtOut=8, sep=c); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 5.** Separate number of repetitions for each element: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put [%repList([D][C][B][A], each = 2 3 5 7, sep=] [)]; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 6.** "ASCII art" butterflies: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put {>%repList(! $ |, times = 2, each =2 1, sep=<} ... {>)<}; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** Data repeating: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data A; + x=17; +data B; + x=42; +data C; + x=303; +run; + +data Times2_A10B11C12; + set + %repList(A B C, times = 2, each =10 11 12) + ; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +--- + + +## >>> `%intsList()` macro: <<< ####################### + +The intsList() macro function allows to print a list of +integers starting from `start` up to `end` incremented by `by` +and separated by `sep=`. + +If `start`, `end` or `by` are non-integers the are converted to integers. + +See examples below for the details. + +The `%intsList()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%intsList( + start + <,end> + <,by> + <,sep=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `start` - *Required*, the first value of the list. + If `end` is missing then the list is generated + from 1 to `start` by 1. + +2. `end` - *Required/Optional*, the last value of the list. + +3. `by` - *Required/Optional*, the increment of the list. + If missing then set to `1`. + *Cannot* be equal to `0`. + +* `s = %str( )` - *Optional*, it is a separator between + elements of the list. Default value is space. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple list of integers from 1 to 10 by 1: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %intsList(10); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Ten copies of `sashelp.class` in `test11` to `test20`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data + %zipEvalf(test, %intsList(11,20)) + ; + set sashelp.class; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Non-integers are converted to integers, the list is `1 3 5`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %intsList(1.1,5.2,2.3); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** A list with a separator: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %intsList(1,5,2,sep=+); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%letters()` macro: <<< ####################### + +The letters() macro function allows to print a list of Roman +letters starting from `start` up to `end` incremented by `by`. +The letters list can be uppercases or lowercase (parameter `c=U` or `c=L`), +can be quoted (e.g. `q=""` or `q=[]`), and can be separated by `s=`. + +Values of `start`, `end`, and `by` have to be integers in range between 1 ad 26. + +See examples below for the details. + +The `%letters()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%letters( + range + <,c=> + <,q=> + <,s=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `range` - *Required*, letters selector in form `start:end:by`. + Lists letters from `start` to `end` by `by`. + Values of `start`, `end`, and `by` are separated by + colon and must be between 1 ad 26. + If value is outside range it is set to + `start=1`, `en=26`, and `by=1`. If `end` is missing + then is set to value of `start`. + If `end` is smaller than `start` list is reversed + +* `c = U` - *Optional*, it is a lowercase letters indicator. + Select `L` or `l`. Default value is `U` for upcase. + +* `q = ` - *Optional*, it is a quite around elements of the list. + Default value is empty. Use `%str()` for one quote symbol. + If there are multiple symbols, only the first and the + second are selected as a preceding and trailing one, + e.g. `q=[]` gives `[A] [B] ... [Z]`. + +* `s = %str( )` - *Optional*, it is a separator between + elements of the list. Default value is space. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Space separated list of capital letters from A to Z: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26:1); + + %put %letters(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** First, thirteenth, and last letter: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1) %letters(13) %letters(26); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Every third lowercase letter, i.e. `a d g j m p s v y`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26:3,c=L); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Lists with separators: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26:2,s=#); + %put %letters(1:26:3,s=%str(;)); + %put %letters(1:26:4,s=%str(,)); + %put %letters(1:26,s=); + %put %letters(1:26,s==); + %put %letters(1:26,s=/); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** Every second letter with quotes: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26:2,q=%str(%')); + %put %letters(2:26:2,q=%str(%")); + + %put %letters(1:26:2,q=''); + %put %letters(2:26:2,q=""); + + %put %letters(1:26:2,q=<>); + %put %letters(2:26:2,q=\/); + + %put %letters(1:26:2,q=()); + %put %letters(2:26:2,q=][); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** Mix of examples 4, 5, and 6: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26,c=L,q='',s=%str(, )); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** If `end` is smaller than `start` list is reversed: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(26:1:2,q=''); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%splitDSIntoBlocks()` macro: <<< ####################### + +The splitDSIntoBlocks() macro allows to split the `set` dataset into blocks +of size `blockSize` in datasets: `prefix1` to `prefixN`. + +The last dataset may have less observations then the `blockSize`. + +Macro covers `BASE` engine (`v9`, `v8`, `v7`, `v6`) and `SPDE` engine datasets. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%splitDSIntoBlocks( + blockSize + <,set> + <,prefix> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `blockSize` - *Required*, the size of the block of data, + in other words number of observations in + one block of split data. + Block size must be positive integer. + +2. `set` - *Required/Optional*, the name of the dataset to split. + If empty then `&syslast.` is used. + +3. `prefix` - *Required/Optional*, the name-prefix for new datasets. + If missing then set to `part`. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Split `sashelp.class` into 5 elements datasets ABC1 to ABC4: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %splitDSIntoBlocks(5,sashelp.class,ABC) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** By default splits the `_last_` dataset into `part1` to `partN` datasets: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data lastData; + set sashelp.cars; + run; + + %splitDSIntoBlocks(123) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Works with `SPDE` engine too: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlcreatedir; + libname test "%sysfunc(pathname(work))/testSPDE"; + libname test; + libname test SPDE "%sysfunc(pathname(work))/testSPDE"; + + data test.test; + set sashelp.cars; + run; + + %splitDSIntoBlocks(100,test.test,work.spde) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%splitDSIntoParts()` macro: <<< ####################### + +The splitDSIntoParts() macro allows to split the `set` dataset into `parts` parts +of approximately `NOBS/parts` size in datasets: `prefix1` to `prefixN`. + +The splitDSIntoParts() macro internally runs the splitDSIntoBlocks() macro. + +Macro covers `BASE` engine (`v9`, `v8`, `v7`, `v6`) and `SPDE` engine datasets. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%splitDSIntoParts( + parts + <,set> + <,prefix> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `parts` - *Required*, the number of parts to split data into. + Number of parts must be positive integer. + +2. `set` - *Required/Optional*, the name of the dataset to split. + If empty then `&syslast.` is used. + +3. `prefix` - *Required/Optional*, the name-prefix for new datasets. + If missing then set to `part`. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Split `sashelp.cars` into 7 parts: datasets carsInParts1 to carsInParts7: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %splitDSIntoParts(7,sashelp.cars, carsInParts) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** By default splits the `_last_` dataset into `part1` to `part3` datasets: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data lastData; + set sashelp.cars; + run; + + %splitDSIntoBlocks(3) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Works with `SPDE` engine too: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlcreatedir; + libname test "%sysfunc(pathname(work))/testSPDE"; + libname test; + libname test SPDE "%sysfunc(pathname(work))/testSPDE"; + + data test.test; + set sashelp.cars; + run; + + %splitDSIntoParts(3,test.test,work.spde) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%filePath()` macro: <<< ####################### + +The filePath() macro function returns path to a file, +it is a wrapper to `pathname()` function for files. + +See examples below for the details. + +The `%filePath()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%filePath( + fileref +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `fileref` - *Required*, a fileref from the `filename` statement. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Return path to temporary file: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + filename f temp; + %put %filePath(f); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%libPath()` macro: <<< ####################### + +The libPath() macro function returns path to a library, +it is a wrapper to `pathname()` function for libraries. + +See examples below for the details. + +The `%libPath()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%libPath( + libref +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `libref` - *Required*, a libref from the `libname` statement. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Return path to `WORK` library: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %libPath(WORK); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Return path to `SASHELP` library: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %libPath(SASHELP); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%workPath()` macro: <<< ####################### + +The workPath() macro function returns path to the `WORK` library, +it is a wrapper to `pathname("work", "L")` function. + +See examples below for the details. + +The `%workPath()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%workPath() +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +*) No arguments. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Create new library inside `WORK` library: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlCreateDir; + libname NEW "%workPath()/new"; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%date()` macro: <<< ####################### + +The date() macro function is a "lazy typer" wrapping up `%sysfunc(date())`. + +See examples below for the details. + +The `%date()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%date() +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + + No arguments. + +--- + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Get value of `date()`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %date(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + + +## >>> `%today()` macro: <<< ####################### + +The today() macro function is a "lazy typer" wrapping up `%sysfunc(today())`. + +See examples below for the details. + +The `%today()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%today() +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + + No arguments. + +--- + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Get value of `today()`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %today(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + + +## >>> `%time()` macro: <<< ####################### + +The time() macro function is a "lazy typer" wrapping up `%sysfunc(time())`. + +See examples below for the details. + +The `%time()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%time() +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + + No arguments. + +--- + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Get value of `time()`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %time(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + + +## >>> `%datetime()` macro: <<< ####################### + +The datetime() macro function is a "lazy typer" wrapping up `%sysfunc(datetime())`. + +See examples below for the details. + +The `%datetime()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%datetime() +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + + No arguments. + +--- + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Get value of `datetime()`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %datetime(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%monthShift()` macro: <<< ####################### + +The monthShift() macro is a utility macro +which allows to shift "year-month" period by +a given number of "periods" (months). + +The result is in the `YYYYMM` format but can be altered. + +See examples below for the details. + +The `%monthShift()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%monthShift( + < Y> + <,M> + <,shift> + <,ofmt=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `Y` - *Optional*, a year from which counting starts. + If null the value is set to *system year*. + +2. `M` - *Optional*, a month from which counting starts. + If null the value is set to `1`. Can be a number + (`1` to `12`) or a name (`June`, `OCTOBER`) or + a three letters short (`JAN`, `apr`). + +3. `shift` - *Optional*, number of periods to shift. + If null the value is set to `0`. + Positive value shifts to the "future", + negative value shifts to the "past", + Can be an expression (e.g. `1+2*3`, see examples). + +* `ofmt=YYMMn6.` - *Optional*, it is a format name used to + display the result. Default value is `YYMMn6.` + See examples. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Shift one up and one down: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put + Past: %monthShift(2023, 1, -1) + Current: %monthShift(2023, 1 ) + Future: %monthShift(2023, 1, +1) +; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Shift by expression: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let n = 2; + %put + %monthShift(2023, 1, +1 + &n.*3) + ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Shift with default values: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %monthShift(); + %put %monthShift(2023); + %put %monthShift(2023,Jan); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Shift with months names: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put + %monthShift(2023,Jan,-1) + %monthShift(2023,Feb,-2) + %monthShift(2023,Mar,-3) + %monthShift(2023,Apr,-4) + %monthShift(2023,May,-5) + %monthShift(2023,Jun,-6) + %monthShift(2023,Jul,-7) + %monthShift(2023,Aug,-8) + %monthShift(2023,Sep,-9) + %monthShift(2023,Oct,-10) + %monthShift(2023,Nov,-11) + %monthShift(2023,Dec,-12) + ; + + %put + %monthShift(2023,January,12) + %monthShift(2023,February,11) + %monthShift(2023,March,10) + %monthShift(2023,April,9) + %monthShift(2023,May,8) + %monthShift(2023,June,7) + %monthShift(2023,July,6) + %monthShift(2023,August,5) + %monthShift(2023,September,4) + %monthShift(2023,October,3) + %monthShift(2023,November,2) + %monthShift(2023,December,1) + ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** Play with formatting: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put + %monthShift(2023, 1, +1 ) + %monthShift(2023, 1, +1, ofmt=yymm7. ) + %monthShift(2023, 1, +1, ofmt=yymmd7.) + %monthShift(2023, 1, +1, ofmt=yymms7.) + ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** Read monthly data with `noDSNFERR` option: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data + A202210 A202211 A202212 + A202301 A202302 A202303 + A202304 A202305 A202306 + A202307 A202308 A202309 + ; + set sashelp.class; + run; + + + options noDSNFERR; + data ALL; + set + A%monthShift(2023, 9, -12) - A%monthShift(2023, 9) + ; + run; + options DSNFERR; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + + +## >>> `%translate()` macro: <<< ####################### + +The translate() macro function allows to replace bytes with bytes in text string. + +See examples below for the details. + +The `%translate()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%translate( + string + ,from + ,to +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `string` - *Required*, string to modify. + +2. `from` - *Required*, list of bytes to be replaced with + corresponding bytes from `to`. + +3. `to` - *Required*, list of bytes replacing + corresponding bytes from `from`. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Replace quotes and commas with apostrophes and spaces: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %translate(%str("A", "B", "C"),%str(%",),%str(%' )); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Unify all brackets; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %translate(%str([A] {B} (C) ),{[(<>)]},(((())))); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Replace all digits with `*`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %translate(QAZ1WSSX2EDC3RFV4TGB5YHN6UJM7IK8OL9P0,1234567890,**********); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Letters change: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %translate(%str(A=B),AB,BA); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%tranwrd()` macro: <<< ####################### + +The tranwrd() macro function allows to replace substrings +with other substrings in text string. + +Returned string is unquoted by `%unquote()`. + +See examples below for the details. + +The `%tranwrd()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%tranwrd( + string + ,from + ,to + <,repeat> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `string` - *Required*, string to modify. + +2. `from` - *Required*, substring replaced with + corresponding string from `to`. + +3. `to` - *Required*, substring replacing + corresponding substring from `from`. + +4. `repeat` - *Optional*, number of times the replacing + should be repeated, default is 1. + Useful while removing multiple adjacent + characters, e.g. compress all multiple + spaces (see example 2). +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple text replacement: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %tranwrd(Miss Joan Smith,Miss,Ms.); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Delete multiple spaces; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %tranwrd(%str(A B C),%str( ),%str( ),5); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Remove substring: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %tranwrd(ABCxyzABCABCxyzABC,ABC); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +## >>> `%findDSwithVarVal()` macro: <<< ####################### + +The findDSwithVarVal() macro searches for all +datasets (available for a given session) containing +a variable of a given value. + +The value search is case sensitive - but can be altered with `IC=` parameter. +The value search keeps leading blanks - but can be altered with `TB=` parameter. +The value search compares full value - but can be altered with `CTS=` parameter. + +The default variable type is `char`, the `type=` parameter allows +to change it (possible values are `char` and `num`), the parameter is case sensitive. + +Only datasets are searched, views are not included. + +During the process two temporary datasets named: +`WORK._` (single underscore) and `WORK.__` (double underscore) +are generated. The datasets are deleted at the end of the process. + +By default search results are stored in the `WORK.RESULT` dataset. +Name of the dataset can be altered with `result=` parameter. +The dataset with result contains two variables: +`datasetName` - names of datasets, +`firstObservation` - the firs occurrence of the value. + +See examples below for the details. + +The `%findDSwithVarVal()` macro does not execute as a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%findDSwithVarVal( + variable + ,value + <,type=> + <,ic=> + <,tb=> + <,cts=> + <,lib=> + <,result=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `variable` - *Required*, name of variable to be searched. + +2. `value` - *Required*, the value to be searched. + +*. `type` - *Optional*, default value is `char`. + Indicates which type is the searched value. + Possible values are `char` and `num`, + the parameter is case sensitive. + +*. `ic` - *Optional*, "Ignore Cases", default value is `0`. + Indicates should the search ignore cases of the text values. + Possible values are `0` and `1`. + +*. `tb` - *Optional*, "Trim Blanks", default value is `0`. + Indicates should the search trim leading and trailing + blanks of the text values. + Possible values are `0` and `1`. + +*. `cts` - *Optional*, "Compare To Shorter", default value is `0`. + IF set to `1` execute value comparison as `=:` for the text value. + Possible values are `0` and `1`. + See examples. + +*. `lib` - *Optional*, default value is missing. + If not empty narrows the search to a particular library. + +*. `result` - *Optional*, default value is `WORK.RESULT`. + Is the name of the dataset with results. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Search variable `NAME` containing value `John`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %findDSwithVarVal(name, John) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Search numeric variable `AGE` containing value `14`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %findDSwithVarVal(age, 14, type=num) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Search numeric variable `SCORE` with missing value: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data TEST; + score=17; output; + score=42; output; + score=. ; output; + run; + + %findDSwithVarVal(score, ., type=num, result=WORK.MissingScore) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Search library `WORK` for variable `NAME` starting with value `Jo` + ignoring cases and trimming blanks from value: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data A; + name="Joanna"; + data B; + name="john"; + data C; + name=" Joseph"; + data D; + name=" joe"; + run; + + %findDSwithVarVal(name, Jo, ic=1, tb=1, cts=1, lib=WORK) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%getTitle()` macro: <<< ####################### + +The getTitle() macro extract text of titles or footnotes +into a delimited list. + +Titles/footnotes numbers can be selected with the `number` argument. +Only the text of a title or footnote is extracted. + +Author of the original code is: Quentin McMullen (`qmcmullen.sas@gmail.com`). + +See examples below for the details. + +The `%getTitle()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%getTitle( + < number> + <,type=> + <,dlm=> + <,qt=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `number` - *Optional*, default value is empty, + indicates numbers of titles to be extracted. + Space separated list is expected. + If empty or `_ALL_` extract all non-missing. + +*. `type` - *Optional*, default value is `T`. + Indicates which type is the searched. + `T` fro title, `F` for footnote. + +*. `dlm` - *Optional*, "DeLiMiter", default value is `|` (pipe). + Possible values are: `| \ / , . ~ * # @ ! + - _ : ?` + or `s` for space, `c` for comma, `d` for semicolon. + +*. `qt` - *Optional*, "QuoTes", default value is empty. + Use `%str()` for single quote symbol (e.g. `%str(%")`). + If there are multiple symbols, only the first and the + second are selected as a leading and trailing one, + e.g. `qt=""` gives `"title1 text" "title2 text" ... `. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Get titles in different forms: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + title1 j=c "Hi Roger" ; + title2 j=l "Good Morning" ; + title3 "How are you?" ; + title4 ; + title5 "Bye bye!" ; + + %put %GetTitle() ; + + %put %GetTitle(1 3,dlm=c, qt=[]) ; + + %put %GetTitle(2:4,dlm=s, qt='') ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Get footnotes in different forms: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + footnote1 "First little footnote"; + footnote2 "Second little footnote"; + footnote3 "Third little footnote"; + + %put %GetTitle(1 2,type=f,dlm=s, qt="") ; + %put %GetTitle(2 3,type=f,dlm=c, qt='') ; + %put %GetTitle(1 3,type=f,dlm=d, qt=[]) ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%mInclude()` macro: <<< ####################### + +The mInclude() macro is a macrolanguage version of the SAS `%include` statement. +But it allows for "embedding any code anywhere into SAS programs". + +Macro was inspired by *Leonid Batkhan* and his blog post: + +"Embedding any code anywhere into SAS programs" from May 30, 2023. + +Link: `https://blogs.sas.com/content/sgf/2023/05/30/embedding-any-code-anywhere-into-sas-programs/` + +The implementation presented, in contrary to inspiration source, is +based on the `doSubL()` function and a list of global +macrovariables of the form `______` (six underscores and a number). + +See examples below for the details. + +The `%mInclude()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%mInclude( + < f> + <,source=> + <,lrecl=> + <,symdel=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `f` - *Required*, a SAS `fileref` or a **quoted** path + to the included file. + +*. `source=0` - *Optional*, default value is `0`. + Set to `1` if the source should be printed in the log. + +*. `lrecl=32767` - *Optional*, default value is `32767`. + Sets the `lrecl` value for the file width. + +*. `symdel=1` - *Optional*, default value is `1`. + Indicates if the global macrovariables + `______1` to `______N` should be deleted + when the macro ends. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Embedding text in statements (the `%include` won't work here): +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + resetline; + filename f "%workpath()/testFile1.txt"; + filename f list; + + data _null_; + file f; + put "13 14 15"; + run; + + resetline; + data testDataset; + set sashelp.class; + where age in ( %mInclude(f) ); + run; + + data testDataset2; + set sashelp.class; + where age in ( %mInclude(f,source=1) ); + run; + + filename f clear; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Embedding with direct path (mind those quotes!): +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + resetline; + filename f "%workpath()/testFile2.txt"; + filename f list; + + %let someGlobalMacroVariable=17; + + data _null_; + file f; + put "options mprint;"; + do i=1 to 3; + put "data y; x = " i "; run;"; + put '%macro A' i +(-1) '(); %put ' i ' ** &someGlobalMacroVariable.; %mend; %A' i +(-1) '()'; + end; + put "options nomprint;"; + run; + + resetline; + %mInclude("%workpath()/testFile2.txt") + + %mInclude("%workpath()/testFile2.txt",source=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Embedding SQL code inside the pass through execution: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + resetline; + filename f2 "%workpath()/testSql.txt"; + + data _null_; + file f2; + input; + put _infile_; + cards4; + select + c2.make + , c2.model + , c2.type + , c2.invoice + , c2.date + + from + public.CARS_EU c2 + + where + c2.cylinders > 4 + and + c2.date > '2023-04-02' + ;;;; + run; + + + title 'the %include fails'; + proc sql; + connect to POSTGRES as PSGDB ( + server="127.0.0.1" + port=5432 + user="user" + password="password" + database="DB" + ); + + select * from connection to PSGDB + ( + %Include f2 / source2; + ) + ; + + disconnect from PSGDB; + quit; + + title 'the %mInclude works'; + proc sql; + connect to POSTGRES as PSGDB ( + server="127.0.0.1" + port=5432 + user="user" + password="password" + database="DB" + ); + + + select * from connection to PSGDB + ( + %mInclude(f2, source=1) + ) + ; + + disconnect from PSGDB; + quit; + + title; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** In a limited way and with help of the `resolve()` function, + it even works with IML's interface to R: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + +resetline; +filename f3 TEMP; + +data _null_; + file f3; + infile cards4; + input; + put _infile_ ';'; %* a "semicolon" trick for R statements separation *; +cards4; +rModel <- lm(Weight ~ Height, data=Class, na.action="na.exclude") +print (rModel$call) +print (rModel) +;;;; +run; + + +proc iml; + codeText = resolve(' %mInclude(f3, source=1) '); + print codeText; + + call ExportDataSetToR("Sashelp.Class", "Class" ); + submit codeText / R; + &codeText + endsubmit; +quit; + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%fmt()` macro: <<< ####################### + +The fmt() macro function returns a `value` formatted by a `format`, +it is a wrapper to `putN()` and `putC()` functions. + +See examples below for the details. + +The `%fmt()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%fmt( + value + ,format + ,align + <,type=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `value` - *Required*, a value to be formatted. + +2. `format` - *Required*, a name of a format to be used, + character format should be preceded by the `$`. + +3. `align` - *Optional*, allows to use the `-L`, `-R` and `-C` modifiers. + +* `type=n` - *Optional*, defines type of the format. If the format + name is preceded by the `$` then C is set automatically. + If the character format name is without `$` then set + value to `C` yourself. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Formatting values: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %fmt(111, 7.2); + + %put %fmt(111, dollar10.2); + + %put %fmt(abc, $upcase.); + + %put %fmt(12345, date9.); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Align values (compare different results!): +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%fmt(ABC, $char9., -L)*; + %put *%fmt(ABC, $char9., -R)*; + %put *%fmt(ABC, $char9., -C)*; + + %put %fmt(ABC, $char9., -L); + %put %fmt(ABC, $char9., -R); + %put %fmt(ABC, $char9., -C); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%infmt()` macro: <<< ####################### + +The infmt() macro function returns a `value` read in by an `informat`, +it is a wrapper to `inputN()` and `inputC()` functions. + +See examples below for the details. + +The `%infmt()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%infmt( + value + ,informat + <,type=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `value` - *Required*, a value to be formatted. + +2. `informat` - *Required*, a name of a format to be used, + character format should be preceded by the `$`. + +* `type=n` - *Optional*, defines type of the informat. If the informat + name is preceded by the `$` then C is set automatically. + If the character format name is without `$` then set + value to `C` yourself. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Informatting values: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %infmt(111, 7.2); + %put %infmt(111.234, 7.2); + + %put %infmt($111, dollar10.2); + %put %infmt($111.234, dollar10.2); + + %put %infmt(abc, $upcase.); + + %put %infmt(12mar45, date9.); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +--- + +--- + +--- + +## License #################################################################### + +Copyright (c) since 2020 Bartosz Jablonski + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--- diff --git a/hist/1.32.0/baseplus.zip b/hist/1.32.0/baseplus.zip new file mode 100644 index 0000000000000000000000000000000000000000..7f90b6fe5ab88ce1d4133868b3de23df714c4f69 GIT binary patch literal 289082 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 literal 0 HcmV?d00001