From 9326cd148c592d0c01f05faa389b224d41227e53 Mon Sep 17 00:00:00 2001 From: Bart Jablonski Date: Tue, 14 Nov 2023 14:37:10 +0100 Subject: [PATCH] The BasePlus package [ver. 1.35.0] The BasePlus package [ver. 1.35.0] New `%downloadFilesTo()` macro added. Macro allows conveniently download data from internet or local locations to a directory pointed by user. Documentation updated. --- SHA256 digest for BasePlus: `F*62344EAA8C0DD95CCB164B5C7A91B33865B3D19CD5A2A3EDAC4C31E0541D04C9` --- README.md | 2 +- baseplus.md | 168 +- baseplus.zip | Bin 295726 -> 298574 bytes hist/1.35.0/baseplus.md | 6344 ++++++++++++++++++++++++++++++++++++++ hist/1.35.0/baseplus.zip | Bin 0 -> 298574 bytes 5 files changed, 6495 insertions(+), 19 deletions(-) create mode 100644 hist/1.35.0/baseplus.md create mode 100644 hist/1.35.0/baseplus.zip diff --git a/README.md b/README.md index 437f158..347caeb 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ libname NEW "%workPath()/new"; ``` and more. -SHA256 digest for the latest version of `BasePlus`: F*D84CE41A550DC2D5C092C70C04A796E8329F34087A603BEF0CD366910C162E80 +SHA256 digest for the latest version of `BasePlus`: F*62344EAA8C0DD95CCB164B5C7A91B33865B3D19CD5A2A3EDAC4C31E0541D04C9 [**Documentation for BasePlus**](./baseplus.md "Documentation for BasePlus") diff --git a/baseplus.md b/baseplus.md index 66d02fe..fab46b2 100644 --- a/baseplus.md +++ b/baseplus.md @@ -47,6 +47,7 @@ * [`%unzipLibrary()` macro](#unziplibrary-macro) * [`%zipArch()` macro](#ziparch-macro) * [`%unzipArch()` macro](#unziparch-macro) + * [`%findDSwithVarVal()` macro](#finddswithvarval-macro) * [`%LDSN()` macro](#ldsn-macro) * [`%LDsNm()` macro](#ldsnm-macro) * [`%LVarNm()` macro](#lvarnm-macro) @@ -80,7 +81,7 @@ --- -# The BasePlus package [ver. 1.34.0] ############################################### +# The BasePlus package [ver. 1.35.0] ############################################### The **BasePlus** package implements useful functions and functionalities I miss in the BASE SAS. @@ -102,7 +103,8 @@ Kudos to all who inspired me to generate this package: *Michal Ludwicki*, *Quentin McMullen*, *Kurt Bremser*, -*Leonid Batkhan*. +*Leonid Batkhan*, +*Louise Hadden*. --- @@ -400,6 +402,16 @@ run; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +**EXAMPLE 26** Downloading data from the internet to a local dirrectory: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%downloadFilesTo(~/directoryA) +datalines4; +https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-189.pdf +https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-189.zip +;;;; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + --- @@ -463,21 +475,22 @@ Package contains: 57. functions quicksortlight 58. macro date 59. macro datetime -60. macro filepath -61. macro finddswithvarval -62. macro fmt -63. macro gettitle -64. macro infmt -65. macro letters -66. macro libpath -67. macro minclude -68. macro monthshift -69. macro replist -70. macro time -71. macro today -72. macro translate -73. macro tranwrd -74. macro workpath +60. macro downloadfilesto +61. macro filepath +62. macro finddswithvarval +63. macro fmt +64. macro gettitle +65. macro infmt +66. macro letters +67. macro libpath +68. macro minclude +69. macro monthshift +70. macro replist +71. macro time +72. macro today +73. macro translate +74. macro tranwrd +75. macro workpath @@ -488,7 +501,7 @@ localization (only if additional content was deployed during the installation pr * SAS package generated by generatePackage, version 20231107 * The SHA256 hash digest for package BasePlus: -`F*D84CE41A550DC2D5C092C70C04A796E8329F34087A603BEF0CD366910C162E80` +`F*62344EAA8C0DD95CCB164B5C7A91B33865B3D19CD5A2A3EDAC4C31E0541D04C9` --- # Content description ############################################################################################ @@ -4051,6 +4064,125 @@ filename pR "%workPath()"; --- +## >>> `%downloadFilesTo()` macro: <<< ####################### + +The downloadFilesTo() macro copy files (in binary mode +using `filename()` function with options `lrecl=1 recfm=n`) +from list provided by user to a directory indicated +in the macro call. + +Macro can be executed in two possible ways: +1) by providing list of files to download in a `datalines4`(`cards4`) list + directly after macro call: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %downloadFilesTo() + datalines4; + + + ... + + ;;;; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +2) by create a dataset with a list of links and use of `DS=` and `DSvar=` parameters. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %downloadFilesTo( + , DS= + , DSvar= + ) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +See examples below for the details. + +The `%downloadFilesTo()` macro **does not** execute as a pure macro code. + +Temporary dataset `work.______locationInfoData` is generated during processing. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%downloadFilesTo( + target + <,DS=> + <,DSvar=link> + <,inDev=URL> + <,outDev=DISK> + <,inOptions=> + <,outOptions=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `target ` - *Required*, a path to target directory. + If empty the `WORK` location is used. + +*. `DS= ` - *Optional*, name of data set with list + of files to download. + +*. `DSvar= ` - *Optional*, name of variable in data set + with list of files to download. + + +*. `inDev=` - *Optional*, type of device used by the + `filename()` function to access incoming files. + Default value is `URL`. + +*. `outDev=` - *Optional*, type of device used by the + `filename()` function to access outgoing files. + Default value is `DISK`. + +*. `inOptions=` - *Optional*, list of additional options for the + `filename()` function to access incoming files. + Default value is empty. + +*. `outOptions=` - *Optional*, list of additional options for the + `filename()` function to access outgoing files. + Default value is empty. + + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Download data from web with diect list and then copy between directories: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +resetline; +%downloadFilesTo(~/directoryA) +datalines4; +https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-189.pdf +https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-189.zip +;;;; +run; + +%downloadFilesTo(~/directoryB,inDev=DISK) +datalines4; +~/directoryA/WUSS-2023-Paper-189.pdf +~/directoryA/WUSS-2023-Paper-189.zip +;;;; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Download data from web using data set with list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +resetline; +data listOfFiles; +infile cards; +input files :$1024.; +cards4; +https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-201.pdf +https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-109.pdf +;;;; +run; + +%downloadFilesTo(R:\directoryC, DS=listOfFiles, DSvar=files) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + ## >>> `%LDSN()` macro: <<< ####################### The LDSN (Long DataSet Names) macro function diff --git a/baseplus.zip b/baseplus.zip index 700e6c8be1cf6b41bd33bd7f2c81bef725bbf0ef..70b42201d90f1b10d8421fc9f48ebcd14318b3bd 100644 GIT binary patch delta 26760 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 delta 23696 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 ############################################### + +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*, +*Louise Hadden*. + +--- + +### 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) +; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 25** Zipping and unzipping directories: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options dlCreateDir; +libname arch1 "%workPath()/testArch1"; +libname arch2 "%workPath()/testArch2"; + +filename arch1 "%workPath()/testArch1"; + +data _null_; + file arch1(test1.txt); + put "text for test file 1"; +data _null_; + file arch1(test2.txt); + put "text for test file 2"; +data _null_; + file arch1(test3.txt); + put "text for test file 3"; +run; + +data arch1.class(index=(name)); + set sashelp.class; +run; +data arch1.cars(index=(model)); + set sashelp.cars; +run; + +%zipArch( + archName2.zip +, pathRef = arch1 +, target = %workPath()/testArch2 +, list = 1 +, overwrite = 1 +) + +%unzipArch( + archName2.zip +, path = %workPath()/testArch2 +, target = %workPath()/testArch2 +, clean=1 +, list=1 +); + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 26** Downloading data from the internet to a local dirrectory: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%downloadFilesTo(~/directoryA) +datalines4; +https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-189.pdf +https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-189.zip +;;;; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +--- + +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 unziparch +23. macro unziplibrary +24. macro ziparch +25. macro zipevalf +26. macro ziplibrary +27. format bool +28. format boolz +29. format ceil +30. format floor +31. format int +32. functions arrfill +33. functions arrfillc +34. functions arrmissfill +35. functions arrmissfillc +36. functions arrmisstoleft +37. functions arrmisstoleftc +38. functions arrmisstoright +39. functions arrmisstorightc +40. functions bracketsc +41. functions bracketsn +42. functions catxfc +43. functions catxfi +44. functions catxfj +45. functions catxfn +46. functions deldataset +47. functions semicolonc +48. functions semicolonn +49. format brackets +50. format semicolon +51. proto qsortincbyprocproto +52. functions frommissingtonumberbs +53. functions fromnumbertomissing +54. functions quicksort4notmiss +55. functions quicksorthash +56. functions quicksorthashsddv +57. functions quicksortlight +58. macro date +59. macro datetime +60. macro downloadfilesto +61. macro filepath +62. macro finddswithvarval +63. macro fmt +64. macro gettitle +65. macro infmt +66. macro letters +67. macro libpath +68. macro minclude +69. macro monthshift +70. macro replist +71. macro time +72. macro today +73. macro translate +74. macro tranwrd +75. 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 20231107 * + +The SHA256 hash digest for package BasePlus: +`F*62344EAA8C0DD95CCB164B5C7A91B33865B3D19CD5A2A3EDAC4C31E0541D04C9` + +--- +# 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) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%zipArch()` macro: <<< ####################### + +The zipArch() macro allows to ZIP content of a directory. +Macro is OS independent, the `XCMD` option is not required. + +Content of zipped archive can be listed in the log. + +Errors of decompression and are reported. + +Macro **does not** include hidden files. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%zipArch( + archName + ,path = + <,pathRef=> + <,target=> + <,targetRef=> + <,list=> + <,overwrite=> + <,dropList=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `archName` - *Required*, name of the archive to be generated. + Name should be full, i.e., with the extension! + +2. `path=` - *Required/Optional*, location of a directory to ZIP. + The path should be provided unquoted. + Has priority over the `pathRef` parameter. + +* `pathRef=` - *Required/Optional*, fileref to location of a directory to ZIP. + The reference **has** to be pointing to single directory. + If provided with `path` - the `path` takes + priority over the `pathRef` parameter. + +* `target=` - *Optional*, a path pointing to target location where + the archive will be generated. + The path should be provided unquoted. + Default value is `WORK` location. + Has priority over the `targetRef` parameter. + +* `targetRef=` - *Optional*, fileref to a path pointing to target location + where the archive will be generated. + The reference **has** to be pointing to single directory. + If provided with `target` - the `target` takes + priority over the `targetRef` parameter. + +* `list = 0` - *Optional*, default value is `0`, + indicates if zip content should be listed in the log. + `1` means *yes*, `0` means *no*. + +* `overwrite = 0` - *Optional*, default value is `0`, + indicates if existing archive file should be overwritten. + `1` means *yes*, `0` means *no*. + +* `overwrite = 1` - *Technical*, default value is `1`, + indicates if the "to-be-zipped-files-list" + data set should be deleted. + `1` means *yes*, `0` means *no*. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Zip a directory . Example requires the `basePlus` package. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + +options dlCreateDir; +libname arch1 "%workPath()/testArch1"; +libname arch2 "%workPath()/testArch2"; + +filename arch1 "%workPath()/testArch1"; + +data _null_; + file arch1(test1.txt); + put "text for test file 1"; +data _null_; + file arch1(test2.txt); + put "text for test file 2"; +data _null_; + file arch1(test3.txt); + put "text for test file 3"; +run; + +data arch1.class(index=(name)); + set sashelp.class; +run; +data arch1.cars(index=(model)); + set sashelp.cars; +run; + + + +%zipArch( + archName1.zip +, path = %workPath()/testArch1 +, list = 1 +, overwrite = 1 + +) + +%zipArch( + archName2.zip +, pathRef = arch1 +, target = %workPath()/testArch2 +, list = 1 +, overwrite = 1 +) + + +%unzipArch( + archName2.zip +, path = %workPath()/testArch2 +, target = %workPath()/testArch2 +, clean=1 +, list=1 +); + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%unzipArch()` macro: <<< ####################### + +The unzipArch() macro allows to unzip content of a ZIP archive. +Macro is OS independent, the `XCMD` option is not required. + +The `dlCreateDir` option is used under the hood. + +Content of unzipped archive can be listed in the log. + +Source files can be deleted after decompression. +Errors of decompression and are reported. If any occur +the deletion is suspended. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%unzipArch( + archName + <,path=> + <,pathRef=> + <,target=> + <,targetRef=> + <,list=> + <,clean=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `archName` - *Required*, name of the ZIP archive to be extracted. + Name should be full, i.e., with the extension! + +* `path=` - *Optional*, a path pointing to zipped file location. + The path should be provided unquoted. + Default value is `WORK` location. + +* `pathRef=` - *Optional*, a fileref to path pointing to zipped file location. + The `path`, if not null, has precedense over the `pathRef`. + +* `target=` - *Optional*, a path pointing to target location where + files will be extracted. + The path should be provided unquoted. + Default value is `WORK` location. + +* `target=` - *Optional*, a fileref to path pointing to target location where + files will be extracted. + The `target`, if not null, has precedense over the `targetRef`. + +* `list = 0` - *Optional*, default value is `0`, + indicates if zip content should be listed in the log. + `1` means *yes*, `0` means *no*. + +* `clean = 0` - *Optional*, default value is `0`, + indicates if zip file should be deleted after unzipping. + `1` means *yes*, `0` means *no*. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Unzip compressed archive. Example requires the `basePlus` package. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + +filename arch ZIP "%workPath()/testArch.zip"; + +data _null_; + file arch(abc/test1.txt); + put "text for test file 1"; +data _null_; + file arch(abc/subdir/test2.txt); + put "text for test file 2"; +data _null_; + file arch(abc/subdir/test3.txt); + put "text for test file 3"; +run; + +%unzipArch( + testArch.zip +, path = %workPath() +, target = %workPath() +, list=1 +); + + + +filename pR "%workPath()"; + +%unzipArch( + testArch.zip +, pathRef = pR +, targetRef = pR +, clean=1 +); + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%downloadFilesTo()` macro: <<< ####################### + +The downloadFilesTo() macro copy files (in binary mode +using `filename()` function with options `lrecl=1 recfm=n`) +from list provided by user to a directory indicated +in the macro call. + +Macro can be executed in two possible ways: +1) by providing list of files to download in a `datalines4`(`cards4`) list + directly after macro call: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %downloadFilesTo() + datalines4; + + + ... + + ;;;; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +2) by create a dataset with a list of links and use of `DS=` and `DSvar=` parameters. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %downloadFilesTo( + , DS= + , DSvar= + ) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +See examples below for the details. + +The `%downloadFilesTo()` macro **does not** execute as a pure macro code. + +Temporary dataset `work.______locationInfoData` is generated during processing. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%downloadFilesTo( + target + <,DS=> + <,DSvar=link> + <,inDev=URL> + <,outDev=DISK> + <,inOptions=> + <,outOptions=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `target ` - *Required*, a path to target directory. + If empty the `WORK` location is used. + +*. `DS= ` - *Optional*, name of data set with list + of files to download. + +*. `DSvar= ` - *Optional*, name of variable in data set + with list of files to download. + + +*. `inDev=` - *Optional*, type of device used by the + `filename()` function to access incoming files. + Default value is `URL`. + +*. `outDev=` - *Optional*, type of device used by the + `filename()` function to access outgoing files. + Default value is `DISK`. + +*. `inOptions=` - *Optional*, list of additional options for the + `filename()` function to access incoming files. + Default value is empty. + +*. `outOptions=` - *Optional*, list of additional options for the + `filename()` function to access outgoing files. + Default value is empty. + + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Download data from web with diect list and then copy between directories: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +resetline; +%downloadFilesTo(~/directoryA) +datalines4; +https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-189.pdf +https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-189.zip +;;;; +run; + +%downloadFilesTo(~/directoryB,inDev=DISK) +datalines4; +~/directoryA/WUSS-2023-Paper-189.pdf +~/directoryA/WUSS-2023-Paper-189.zip +;;;; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Download data from web using data set with list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +resetline; +data listOfFiles; +infile cards; +input files :$1024.; +cards4; +https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-201.pdf +https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-109.pdf +;;;; +run; + +%downloadFilesTo(R:\directoryC, DS=listOfFiles, DSvar=files) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%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.35.0/baseplus.zip b/hist/1.35.0/baseplus.zip new file mode 100644 index 0000000000000000000000000000000000000000..70b42201d90f1b10d8421fc9f48ebcd14318b3bd GIT binary patch literal 298574 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�R$sfGUiv1D)>Z_>*6*k2J&gM^A3=4RR=$; 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 z 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∋I%kv_!s>@A*-!T-oyr@@> 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 literal 0 HcmV?d00001