From 0c1e5c7d3a48bb9152800ba80228d4bb3d06ec9b Mon Sep 17 00:00:00 2001 From: Bart Jablonski Date: Tue, 19 Sep 2023 17:44:00 +0200 Subject: [PATCH] The BasePlus package [ver. 1.30.0] The BasePlus package [ver. 1.30.0] - new macro `%repList()` added - doc. updated SHA256 digest: `F*B91771D45C781B6806DBB44A3B491A0784D7698B9F3BBBE1A86EE5594834315F` --- README.md | 2 +- baseplus.md | 152 +- baseplus.zip | Bin 281263 -> 283708 bytes hist/1.30.0/baseplus.md | 5640 ++++++++++++++++++++++++++++++++++++++ hist/1.30.0/baseplus.zip | Bin 0 -> 283708 bytes 5 files changed, 5788 insertions(+), 6 deletions(-) create mode 100644 hist/1.30.0/baseplus.md create mode 100644 hist/1.30.0/baseplus.zip diff --git a/README.md b/README.md index 0ad9efd..7f16c5c 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ libname NEW "%workPath()/new"; ``` and more. -SHA256 digest for the latest version of `BasePlus`: F*2FE68DD9B3692B9D46EF85B82F63C7E65010BF9E89D670FD1779F4670FA03F31 +SHA256 digest for the latest version of `BasePlus`: F*B91771D45C781B6806DBB44A3B491A0784D7698B9F3BBBE1A86EE5594834315F [**Documentation for BasePlus**](./baseplus.md "Documentation for BasePlus") diff --git a/baseplus.md b/baseplus.md index f9b0a87..2e47556 100644 --- a/baseplus.md +++ b/baseplus.md @@ -52,6 +52,7 @@ * [`%bpPIPE()` macro](#bppipe-macro) * [`%dirsAndFiles()` macro](#dirsandfiles-macro) * [`%repeatTxt()` macro](#repeattxt-macro) + * [`%repList()` macro](#replist-macro) * [`%intsList()` macro](#intslist-macro) * [`%letters()` macro](#letters-macro) * [`%splitDSIntoBlocks()` macro](#splitdsintoblocks-macro) @@ -72,7 +73,7 @@ --- -# The BasePlus package [ver. 1.29.1] ############################################### +# The BasePlus package [ver. 1.30.0] ############################################### The **BasePlus** package implements useful functions and functionalities I miss in the BASE SAS. @@ -309,6 +310,33 @@ run; 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; + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + --- Package contains: @@ -375,9 +403,11 @@ Package contains: 61. macro letters 62. macro libpath 63. macro minclude -64. macro translate -65. macro tranwrd -66. macro workpath +64. macro replist +65. macro translate +66. macro tranwrd +67. macro workpath + @@ -388,7 +418,7 @@ localization (only if additional content was deployed during the installation pr * SAS package generated by generatePackage, version 20230905 * The SHA256 hash digest for package BasePlus: -`F*2FE68DD9B3692B9D46EF85B82F63C7E65010BF9E89D670FD1779F4670FA03F31` +`F*B91771D45C781B6806DBB44A3B491A0784D7698B9F3BBBE1A86EE5594834315F` --- # Content description ############################################################################################ @@ -4399,6 +4429,118 @@ run; --- +## >>> `%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 diff --git a/baseplus.zip b/baseplus.zip index 640e533c13726e878d878bd4f71f3917841505d8..37f2de5a71ea20a1eea54d57a49cdbb66057bd16 100644 GIT binary patch delta 19587 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 XX=QeX4Neb2vhZgbR^p)qv_<{{7#hhm delta 17050 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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 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*. + +Recording from the SAS Explore 2022 conference: [A BasePlus Package for SAS](https://communities.sas.com/t5/SAS-Explore-Presentations/A-BasePlus-Package-for-SAS/ta-p/838246 "A BasePlus Package for SAS") (September 27th-29th, 2022). + +--- + +### BASIC EXAMPLES AND USECASES: #################################################### + +**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; + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +Package contains: +1. macro bppipe +2. macro deduplistc +3. macro deduplistp +4. macro deduplists +5. macro deduplistx +6. macro dirsandfiles +7. macro functionexists +8. macro getvars +9. macro intslist +10. macro ldsn +11. macro ldsnm +12. macro lvarnm +13. macro lvarnmlab +14. macro qdeduplistx +15. macro qgetvars +16. macro qzipevalf +17. macro raincloudplot +18. macro repeattxt +19. macro splitdsintoblocks +20. macro splitdsintoparts +21. macro symdelglobal +22. macro unziplibrary +23. macro zipevalf +24. macro ziplibrary +25. format bool +26. format boolz +27. format ceil +28. format floor +29. format int +30. functions arrfill +31. functions arrfillc +32. functions arrmissfill +33. functions arrmissfillc +34. functions arrmisstoleft +35. functions arrmisstoleftc +36. functions arrmisstoright +37. functions arrmisstorightc +38. functions bracketsc +39. functions bracketsn +40. functions catxfc +41. functions catxfi +42. functions catxfj +43. functions catxfn +44. functions deldataset +45. functions semicolonc +46. functions semicolonn +47. format brackets +48. format semicolon +49. proto qsortincbyprocproto +50. functions frommissingtonumberbs +51. functions fromnumbertomissing +52. functions quicksort4notmiss +53. functions quicksorthash +54. functions quicksorthashsddv +55. functions quicksortlight +56. macro filepath +57. macro finddswithvarval +58. macro fmt +59. macro gettitle +60. macro infmt +61. macro letters +62. macro libpath +63. macro minclude +64. macro replist +65. macro translate +66. macro tranwrd +67. 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 20230905 * + +The SHA256 hash digest for package BasePlus: +`F*B91771D45C781B6806DBB44A3B491A0784D7698B9F3BBBE1A86EE5594834315F` + +--- +# Content description ############################################################################################ + +## >>> `%getVars()` macro: <<< ####################### + +The getVars() and QgetVars() macro functions +allow to extract variables names form a dataset +according to a given pattern into a list. + +The getVars() returns unquoted value [by %unquote()]. +The QgetVars() returns quoted value [by %superq()]. + +See examples below for the details. + +The `%getVars()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%getVars( + ds + <,sep=> + <,pattern=> + <,varRange=> + <,quote=> + <,mcArray=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `ds` - *Required*, the name of the dataset from + which variables are to be taken. + +* `sep = %str( )` - *Optional*, default value `%str( )`, + a variables separator on the created list. + +* `pattern = .*` - *Optional*, default value `.*` (i.e. any text), + a variable name regexp pattern, case INSENSITIVE! + +* `varRange = _all_` - *Optional*, default value `_all_`, + a named range list of variables. + +* `quote =` - *Optional*, default value is blank, a quotation + symbol to be used around values. + +* `mcArray=` - *Optional*, default value is blank. + 1) When *null* - the macro behaves like a macro function + and returns a text string with variables list. + 2) When *not null* - behaviour of the macro is altered. + In such case a macro array of selected variables, named + with `mcArray` value as a prefix, is created. + Furthermore a macro named as `mcArray` value is generated. + (see the macroArray package for the details). + When `mcArray=` parameter is active the `getVars` macro + cannot be called within the `%put` statement. Execution like: + `%put %getVars(..., mcArray=XXX);` will result with + an Explicit & Radical Refuse Of Run (aka ERROR). + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** A list of all variables from the + sashelp.class dataset: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** A list of all variables from the + sashelp.class dataset separated + by backslash: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let x = %getVars(sashelp.class, sep=\); + %put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Use of regular expressions: + a) A list of variables which name contains "i" or "a" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, pattern=i|a)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + b) A list of variables which name starts with "w" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, pattern=^w)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + c) A list of variables which name ends with "ght" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, pattern=ght$)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** A list of numeric variables which name + starts with "w" or "h" or ends with "x" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, sep=+, pattern=^(w|h)|x$, varRange=_numeric_)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data test; + array x[30]; + array y[30] $ ; + array z[30]; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + a) A list of variables separated by a comma: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(test, sep=%str(,))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + b) A list of variables separated by a comma + with suffix 5 or 7: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(test, sep=%str(,), pattern=(5|7)$)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + c) A list of variables separated by a comma + with suffix 5 or 7 from a given variables range: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(test, sep=%str(,), varRange=x10-numeric-z22 y6-y26, pattern=(5|7)$)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** Case of quotes and special characters + when the quote= parameter is _not_ used: + + a) one single or double qiote: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%bquote(%getVars(sashelp.class, sep=%str(%")))*; + %put *%bquote(%getVars(sashelp.class, sep=%str(%')))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + b) two single or double qiotes: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *"%bquote(%getVars(sashelp.class,sep=""))"*; + %put *%str(%')%bquote(%getVars(sashelp.class,sep=''))%str(%')*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + c) coma separated double quote list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *"%getVars(sashelp.class,sep=%str(", "))"*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + d) coma separated single quote list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%str(%')%getVars(sashelp.class,sep=', ')%str(%')*; + %let x = %str(%')%getVars(sashelp.class,sep=', ')%str(%'); + + %put *%str(%')%QgetVars(sashelp.class,sep=', ')%str(%')*; + %let y = %str(%')%QgetVars(sashelp.class,sep=', ')%str(%'); + %let z = %unquote(&y.); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + e) ampersand (&) as a separator [compare behaviour]: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class,sep=&)*; + %let x = %getVars(sashelp.class,sep=&); + + %put *%getVars(sashelp.class,sep=%str( & ))*; + %let x = %getVars(sashelp.class,sep=%str( & )); + + %put *%QgetVars(sashelp.class,sep=&)*; + %let y = %QgetVars(sashelp.class,sep=&); + %let z = %unquote(&y.); + + %put *%QgetVars(sashelp.class,sep=%str( & ))*; + %let y = %QgetVars(sashelp.class,sep=%str( & )); + %let z = %unquote(&y.); + + %put *%getVars(sashelp.class,sep=&)*; + %let x = %getVars(sashelp.class,sep=&); + + %put *%getVars(sashelp.class,sep=%str( & ))*; + %let x = %getVars(sashelp.class,sep=%str( & )); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + f) percent (%) as a separator [compare behaviour]: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%QgetVars(sashelp.class,sep=%)*; + %let y = %QgetVars(sashelp.class,sep=%); + %let z = %unquote(&y.); + + %put *%QgetVars(sashelp.class,sep=%str( % ))*; + %let y = %QgetVars(sashelp.class,sep=%str( % )); + %let z = %unquote(&y.); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** Case of quotes and special characters + when the quote= parameter is used: + +a) one single or double qiote: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class, quote=%str(%"))*; + %put *%getVars(sashelp.class, quote=%str(%'))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + b) two single or double quotes: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %* this gives an error: ; + %* %put *%getVars(sashelp.class,quote="")*; + %* %put *%getVars(sashelp.class,quote='')*; + + %* this does not give an error: ; + %put *%QgetVars(sashelp.class,quote="")*; + %put *%QgetVars(sashelp.class,quote='')*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + c) coma separated double quote list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%getVars(sashelp.class,sep=%str(,),quote=%str(%"))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + d) coma separated single quote list: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let x = %getVars(sashelp.class,sep=%str(,),quote=%str(%')); + %put &=x.; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 8.** Variables that start with `A` and do not end with `GHT`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data class; + set sashelp.class; + Aeight = height; +run; + +%put *%getVars(class, pattern = ^A(.*)(?>> `%QgetVars()` macro: <<< ####################### + +The getVars() and QgetVars() macro functions +allow to extract variables names form a dataset +according to a given pattern into a list. + +The getVars() returns unquoted value [by %unquote()]. +The QgetVars() returns quoted value [by %superq()]. + +The `%QgetVars()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%QgetVars( + ds + <,sep=> + <,pattern=> + <,varRange=> + <,quote=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `ds` - *Required*, the name of the dataset from + which variables are to be taken. + +* `sep = %str( )` - *Optional*, default value `%str( )`, + a variables separator on the created list. + +* `pattern = .*` - *Optional*, default value `.*` (i.e. any text), + a variable name regexp pattern, case INSENSITIVE! + +* `varRange = _all_` - *Optional*, default value `_all_`, + a named range list of variables. + +* `quote =` - *Optional*, default value is blank, a quotation + symbol to be used around values. + +### EXAMPLES AND USECASES: #################################################### + +See examples in `%getVars()` help for the details. + +--- + +## >>> `%symdelGlobal()` macro: <<< ####################### + +The `%symdelGlobal()` macro deletes all global macrovariables +created by the user. The only exceptions are read only variables +and variables the one which starts with SYS, AF, or FSP. +In that case a warning is printed in the log. + +One temporary global macrovariable `________________98_76_54_32_10_` +and a dataset, in `work` library, named `_%sysfunc(datetime(),hex7.)` +are created and deleted during the process. + +The `%symdelGlobal()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%symdelGlobal( + info +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `info` - *Optional*, default value should be empty, + if set to `NOINFO` or `QUIET` then infos and + warnings about variables deletion are suspended. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete global macrovariables, info notes + and warnings are printed in the log. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let a = 1; + %let b = 2; + %let c = 3; + %let sys_my_var = 11; + %let af_my_var = 22; + %let fsp_my_var = 33; + %global / readonly read_only_x = 1234567890; + + %put _user_; + + %symdelGlobal(); + + %put _user_; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Basic use-case two. + Delete global macrovariables in quite mode + No info notes and warnings are printed in the log. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let a = 1; + %let b = 2; + %let c = 3; + %let sys_my_var = 11; + %let af_my_var = 22; + %let fsp_my_var = 33; + %global / readonly read_only_x = 1234567890; + + %put _user_; + %put *%symdelGlobal(NOINFO)*; + %put _user_; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +--- + +## >>> `bool.` format: <<< ####################### + +The **bool** format returns: +*zero* for 0 or missing, +*one* for other values. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 & 4.2, boolean)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), bool.)`] + +--- + +## >>> `boolz.` format: <<< ####################### + +The **boolz** format returns: +*zero* for 0 or missing, +*one* for other values. + +*Fuzz* value is 0. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 & 4.2, boolean)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), boolz.)`] + +--- + +## >>> `ceil.` format: <<< ####################### + +The **ceil** format is a "wrapper" for the `ceil()` function. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 + 4.2, ceil)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), ceil.)`] + +--- + +## >>> `floor.` format: <<< ####################### + +The **floor** format is a "wrapper" for the `floor()` function. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 + 4.2, floor)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), floor.)`] + +--- + +## >>> `int.` format: <<< ####################### + +The **int** format is a "wrapper" for the `int()` function. + +### EXAMPLES AND USECASES: #################################################### + +It allows for a %sysevalf()'ish +conversion-type [i.e. `%sysevalf(1.7 + 4.2, integer)`] +inside the `%sysfunc()` [e.g. `%sysfunc(aFunction(), int.)`] + +--- + +## >>> `arrFill()` subroutine: <<< ####################### + +The **arrFill()** subroutine is a wrapper +for the Call Fillmatrix() [a special FCMP subroutine]. + +A numeric array is filled with selected numeric value, e.g. + +for array `A = [. . . .]` the subroutine +`call arrFill(42, A)` returns `A = [42 42 42 42]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrFill(N ,A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `N` - Numeric value. + +2. `A` - Numeric array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + array X[*] a b c; + + put "before: " (_all_) (=); + call arrFill(42, X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrFillC()` subroutine: <<< ####################### + +The **arrFillC()** subroutine fills +a character array with selected character value, e.g. + +for array `A = [" ", " ", " "]` the subroutine +`call arrFillC("B", A)` returns `A = ["B", "B", "B"]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrFillC(C ,A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `C` - Character value. + +2. `A` - Character array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + array X[*] $ a b c; + + put "before: " (_all_) (=); + call arrFillC("ABC", X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissFill()` subroutine: <<< ####################### + +The **arrMissFill()** subroutine fills +all missing values (i.e. less or equal than `.Z`) +of a numeric array with selected numeric value, e.g. + +for array `A = [1 . . 4]` the subroutine +`call arrMissFill(42, A)` returns `A = [1 42 42 4]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissFill(N ,A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `N` - Numeric value. + +2. `A` - Numeric array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + input a b c; +cards4; +1 . 3 +. 2 . +. . 3 +;;;; +run; + +data _null_; + set have ; + array X[*] a b c; + + put "before: " (_all_) (=); + call arrMissFill(42, X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissFillC()` subroutine: <<< ####################### + +The **arrMissFillC()** subroutine fills +all missing values of a character array +with selected character value, e.g. + +for array `A = ["A", " ", "C"]` the subroutine +`call arrMissFillC("B", A)` returns `A = ["A", "B", "C"]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissFillC(C, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `C` - Character value. + +2. `A` - Character array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + infile cards dsd dlm="," missover; + input (a b c) (: $ 1.); +cards4; +A, ,C + ,B, + , ,C +;;;; +run; + +data _null_; + set have ; + array X[*] $ a b c; + + put "before: " (_all_) (=); + call arrMissFillC("X", X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissToLeft()` subroutine: <<< ####################### + +The **arrMissToLeft()** subroutine shifts +all non-missing (i.e. greater than `.Z`) +numeric elements to the right side of an array +and missing values to the left, e.g. + +for array `A = [1 . 2 . 3]` the subroutine +`call arrMissToLeft(A)` returns `A = [. . 1 2 3]` + +All missing values are replaced with the dot (`.`) + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissToLeft(A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Numeric array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + input a b c; +cards4; +1 . 3 +. 2 . +. . 3 +;;;; +run; + +data _null_; + set have ; + array X[*] a b c; + + put "before: " (_all_) (=); + call arrMissToLeft(X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissToLeftC()` subroutine: <<< ####################### + +The **arrMissToLeftC()** subroutine shifts +all non-missing (i.e. different than empty string) +character elements to the right side of an array +and all missing values to the left, e.g. + +for array `A = ["A", " ", "B", " ", "C"]` the subroutine +`call arrMissToLeftC(A)` returns `A = [" ", " ", "A", "B", "C"]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissToLeftC(A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Character array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + infile cards dsd dlm="," missover; + input (a b c) (: $ 1.); +cards4; +A, ,C + ,B, + , ,C +;;;; +run; + +data _null_; + set have ; + array X[*] $ a b c; + + put "before: " (_all_) (=); + call arrMissToLeftC(X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissToRight()` subroutine: <<< ####################### + +The **arrMissToRight()** subroutine shifts +all non-missing (i.e. greater than `.Z`) +numeric elements to the left side of an array +and missing values to the right, e.g. + +for array `A = [1 . 2 . 3]` the subroutine +`call arrMissToRight(A)` returns `A = [1 2 3 . .]` + +All missing values are replaced with the dot (`.`) + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissToRight(A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Numeric array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + input a b c; +cards4; +1 . 3 +. 2 . +. . 3 +;;;; +run; + +data _null_; + set have ; + array X[*] a b c; + + put "before: " (_all_) (=); + call arrMissToRight(X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `arrMissToRightC()` subroutine: <<< ####################### + +The **arrMissToRightC()** subroutine shifts +all non-missing (i.e. different than empty string) +character elements to the left side of an array +and missing values to the right, e.g. + +for array `A = ["A", " ", "B", " ", "C"]` the subroutine +`call arrMissToRightC(A)` returns `A = ["A", "B", "C", " ", " "]` + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +call arrMissToRightC(A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Character array. + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data have; + infile cards dsd dlm="," missover; + input (a b c) (: $ 1.); +cards4; +A, ,C + ,B, + , ,C +;;;; +run; + +data _null_; + set have ; + array X[*] $ a b c; + + put "before: " (_all_) (=); + call arrMissToRightC(X); + put "after: " (_all_) (=); + +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `catXFc()` function: <<< ####################### + +The **catXFc()** function is a wrapper +of the `catX()` function but with ability +to format character values. + +For array `A = ["a", " ", "c"]` the +`catXFc("upcase.", "*", A)` returns `"A*C"`. + +If format does not handle nulls they are ignored. + +*Caution!* Array parameters to function calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +catXFc(format, delimiter, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `format` - A name of the *character* format to be used. + +2. `delimiter` - A delimiter string to be used. + +3. `A` - Character array + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + t = "t"; + u = " "; + v = "v"; + + array b[*] t u v; + + length s $ 17; + s = catXFc("upcase.", "*", B); + put (_all_) (=); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `catXFi()` function: <<< ####################### + +The **catXFi()** function is a wrapper +of the `catX()` function but with ability +to format numeric values but +IGNORES missing values (i.e. `._`, `.`, `.a`, ..., `.z`). + +For array `A = [0, ., 2]` the +`catXFi("date9.", "#", A)` returns +`"01JAN1960#03JAN1960"` + +*Caution!* Array parameters to function calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +catXFi(format, delimiter, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `format` - A name of the *numeric* format to be used. + +2. `delimiter` - A delimiter string to be used. + +3. `A` - Numeric array + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + x = 1; + y = .; + z = 3; + + array a[*] x y z; + + length s $ 17; + s = catXFi("z5.", "#", A); + put (_all_) (=); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `catXFj()` function: <<< ####################### + +The **catXFj()** function is a wrapper +of the catX() function but with ability +to format character values. + +For array `A = ["a", " ", "c"]` the +`catXFj("upcase.", "*", A)` returns `"A**C"` + +If format does not handle nulls they are +printed as an empty string. + +*Caution!* Array parameters to function calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +catXFj(format, delimiter, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `format` - A name of the *character* format to be used. + +2. `delimiter` - A delimiter string to be used. + +3. `A` - Character array + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + t = "t"; + u = " "; + v = "v"; + + array b[*] t u v; + + length s $ 17; + s = catXFj("upcase.", "*", B); + put (_all_) (=); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `catXFn()` function: <<< ####################### + +The **catXFn()** function is a wrapper +of the `catX()` function but with ability +to format numeric values. + +For array `A = [0, 1, 2]` the +`catXFn("date9.", "#", A)` returns +`"01JAN1960#02JAN1960#03JAN1960"` + +*Caution!* Array parameters to function calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +catXFn(format, delimiter, A) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `format` - A name of the *numeric* format to be used. + +2. `delimiter` - A delimiter string to be used. + +3. `A` - Numeric array + + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + x = 1; + y = .; + z = 3; + + array a[*] x y z; + + length s $ 17; + s = catXFn("z5.", "#", A); + put (_all_) (=); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `delDataset()` function: <<< ####################### + +The **delDataset()** function is a "wrapper" +for the `Fdelete()` function. +`delDataset()` function uses a text string with +a dataset name as an argument. + +Function checks for `*.sas7bdat`, `*.sas7bndx`, +and `*.sas7bvew` files and delete them. +Return code of 0 means dataset was deleted. + +For compound library files are +deleted from _ALL_ locations! + + +*Note:* +Currently only the BASE SAS engine datasets/views are deleted. + +Tested on Windows and Linux. Not tested on Z/OS. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +delDataset(lbds_) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `lbds_` - *Required*, character argument containing + name of the dataset/view to be deleted. + The `_last_` special name is honored. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data TEST1 TEST2(index=(x)); + x = 17; + run; + + data TEST3 / view=TEST3; + set test1; + run; + + data _null_; + p = delDataset("WORK.TEST1"); + put p=; + + p = delDataset("TEST2"); + put p=; + + p = delDataset("WORK.TEST3"); + put p=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data TEST4; + x=42; + run; + data _null_; + p = delDataset("_LAST_"); + put p=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 3.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlcreatedir; + libname user "%sysfunc(pathname(work))/user"; + + data TEST5; + x=42; + run; + + data _null_; + p = delDataset("test5"); + put p=; + run; + + libname user clear; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 4.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data TEST6; + x=42; + run; + + %put *%sysfunc(delDataset(test6))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 5.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlcreatedir; + libname L1 "%sysfunc(pathname(work))/L)1"; + libname L2 "%sysfunc(pathname(work))/L(2"; + libname L3 "%sysfunc(pathname(work))/L'3"; + + data L1.TEST7 L2.TEST7 L3.TEST7; + x=42; + run; + + libname L12 ("%sysfunc(pathname(work))/L(1" "%sysfunc(pathname(work))/L)2"); + libname L1L2 (L2 L3); + + %put *%sysfunc(delDataset(L12.test7))*; + %put *%sysfunc(delDataset(L1L2.test7))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `qsortInCbyProcProto()` proto function: <<< ####################### + +The **qsortInCbyProcProto()** is external *C* function, +this is the implementation of the *Quick Sort* algorithm. + +The function is used **internally** by +functions in the *BasePlus* package. + +Asumptions: +- smaller subarray is sorted first, +- subarrays of *size < 11* are sorted by *insertion sort*, +- pivot is selected as median of low index value, + high index value, and (low+high)/2 index value. + +`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`
+`!CAUTION! Sorted array CANNOT contains SAS missing values !`
+`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`
+ +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +qsortInCbyProcProto(arr, low, high) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `arr` - An array of double type to be sorted. + +2. `low` - An integer low index of starting position (from which the sorting is done). + +3. `high` - An integer high index of ending position (up to which the sorting is done). + + +### REFERENCES: #################################################### + +*Reference 1.* + +Insertion sort for arrays smaller then 11 elements: + +Based on the code from the following WikiBooks page [2020.08.14]: + +[https://pl.wikibooks.org/wiki/Kody_%C5%BAr%C3%B3d%C5%82owe/Sortowanie_przez_wstawianie](https://pl.wikibooks.org/wiki/Kody_%C5%BAr%C3%B3d%C5%82owe/Sortowanie_przez_wstawianie) + + +*Reference 2.* + +Iterative Quick Sort: + +Based on the code from the following pages [2020.08.14]: + +[https://www.geeksforgeeks.org/iterative-quick-sort/](https://www.geeksforgeeks.org/iterative-quick-sort/) + +[https://www.geeksforgeeks.org/c-program-for-iterative-quick-sort/](https://www.geeksforgeeks.org/c-program-for-iterative-quick-sort/) + +--- + +## >>> `fromMissingToNumberBS()` function: <<< ####################### + +The **fromMissingToNumberBS()** function +gets numeric missing value or a number +as an argument and returns an integer +from 1 to 29. + +For a numeric missing argument +the returned values are: +- 1 for `._` +- 2 for `.` +- 3 for `.a` +- ... +- 28 for `.z` and +- 29 for *all other*. + +The function is used **internally** by +functions in the *BasePlus* package. + +For *missing value arguments* the function +is an inverse of the `fromNumberToMissing()` function. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +fromMissingToNumberBS(x) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `x` - A numeric missing value or a number. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data _null_; + do x = ._, ., .a, .b, .c, 42; + y = fromMissingToNumberBS(x); + put x= y=; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `fromNumberToMissing()` function: <<< ####################### + +The **fromNumberToMissing()** function +gets a number as an argument and returns +a numeric missing value or zero. + +For a numeric argument +the returned values are: +- `._` for 1 +- `.` for 2 +- `.a` for 3 +- ... +- `.z` for 28 and +- `0` for *all other*. + +The function is used **internally** by +functions in the *BasePlus* package. + +For arguments 1,2,3, ..., and 28 the function +is an inverse of the `fromMissingToNumberBS()` function. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +fromNumberToMissing(x) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `x` - A numeric value. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data _null_; + do x = 1 to 29; + y = fromNumberToMissing(x); + put x= y=; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `quickSort4NotMiss()` subroutine: <<< ####################### + +The **quickSort4NotMiss()** subroutine is an alternative to the +`CALL SORTN()` subroutine for 1-based big arrays (i.e. `> 10'000'000` elements) +when memory used by `call sortn()` may be an issue. +For smaller arrays the memory footprint is not significant. + +The subroutine is based on an iterative quick sort algorithm +implemented in the `qsortInCbyProcProto()` *C* prototype function. + + +**Caution 1!** Array _CANNOT_ contains missing values! + +**Caution 2!** Array parameters to subroutine calls must be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +call quickSort4NotMiss(A) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Argument is a 1-based array of NOT missing numeric values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** For session with 8GB of RAM, + array of size 250'000'000 with values in range + from 0 to 99'999'999 and _NO_ missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + test[_N_] = int(100000000*rand("uniform")); + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSort4NotMiss (test); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** Resources comparison for + session with 8GB of RAM. + + Array of size 250'000'000 with random values + from 0 to 999'999'999 and _NO_ missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 8.82s + memory 1'953'470.62k + OS Memory 1'977'436.00k + + Call quickSort4NotMiss: + Sorting time 66.92s + Memory 1'954'683.06k + OS Memory 1'977'436.00k + + Call quickSortLight: + Sorting time 70.98s + Memory 1'955'479.71k + OS Memory 1'977'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `quickSortHash()` subroutine: <<< ####################### + +The **quickSortHash()** subroutine is an alternative to the +`CALL SORTN()` subroutine for 1-based big arrays (i.e. `> 10'000'000` elements) +when memory used by `call sortn()` may be an issue. +For smaller arrays the memory footprint is not significant. + +The subroutine is based on an iterative quick sort algorithm +implemented in the `qsortInCbyProcProto()` *C* prototype function. + +The number of "sparse distinct data values" is set to `100'000` to +use the hash sort instead of the quick sort. + E.g. when number of unique values for sorting is less then + 100'000 then an ordered hash table is used to store the data + and their count and sort them. + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +*Note!* Due to improper memory reporting/releasing for hash + tables in FCMP procedure the reported memory used after running + the function may not be in line with the RAM memory required + for processing. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +call quickSortHash(A) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Argument is a 1-based array of numeric values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 99'999'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(100000000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortHash (test); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 9'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(10000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortHash (test); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 3.** Resources comparison for + session with 8GB of RAM + + A) Array of size 10'000'000 with + random values from 0 to 9'999 range (sparse) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 0.61s + Memory 78'468.50k + OS Memory 101'668.00k + + Call sortn: + Sorting time 0.87s + Memory 1'120'261.53k + OS Memory 1'244'968.00k + + Call quickSortHash: + Sorting time 6.76s + Memory 1'222'242.75k(*) + OS Memory 1'402'920.00k(*) + + Call quickSortLight: + Sorting time 23.45s + Memory 80'527.75k + OS Memory 101'924.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + B) Array of size 10'000'000 with + random values from 0 to 99'999'999 range (dense) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 0.6s + Memory 78'463.65k + OS Memory 101'924.00k + + Call sortn: + Sorting time 1.51s + Memory 1'120'253.53k + OS Memory 1'244'968.00k + + Call quickSortHash: + Sorting time 6.28s + Memory 1'222'241.93k(*) + OS Memory 1'402'920.00k(*) + + Call quickSortLight: + Sorting time 0.78s + Memory 80'669.28k + OS Memory 102'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + C) Array of size 250'000'000 with + random values from 0 to 999'999'999 range (dense) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 15.34s + memory 1'953'471.81k + OS Memory 1'977'436.00k + + Call sortn: + FATAL: Insufficient memory to execute DATA step program. + Aborted during the COMPILATION phase. + ERROR: The SAS System stopped processing this step + because of insufficient memory. + + Call quickSortHash: + Sorting time 124.68s + Memory 7'573'720.34k(*) + OS Memory 8'388'448.00k(*) + + Call quickSortLight: + Sorting time 72.41s + Memory 1'955'520.78k + OS Memory 1'977'180.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + D) Array of size 250'000'000 with + random values from 0 to 99'999 range (sparse) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 16.07 + Memory 1'953'469.78k + OS Memory 1'977'180.00k + + Call sortn: + FATAL: Insufficient memory to execute DATA step program. + Aborted during the COMPILATION phase. + ERROR: The SAS System stopped processing this step + because of insufficient memory. + + Call quickSortHash: + Sorting time 123.5s + Memory 7'573'722.03k + OS Memory 8'388'448.00k + + Call quickSortLight: + Sorting time 1'338.25s + Memory 1'955'529.90k + OS Memory 1'977'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +(*) When using hash tables in `Proc FCMP` the RAM + usage is not indicated properly. The memory + allocation is reported up to the session limit + and then reused if needed. The really required + memory is in fact much less then reported. + +--- + +## >>> `quickSortHashSDDV()` subroutine: <<< ####################### + +The **quickSortHashSDDV()** subroutine is an alternative to the +`CALL SORTN()` subroutine for 1-based big arrays (i.e. `> 10'000'000` elements) +when memory used by `call sortn()` may be an issue. +For smaller arrays the memory footprint is not significant. + +The subroutine is based on an iterative quick sort algorithm +implemented in the `qsortInCbyProcProto()` *C* prototype function. + +The number of "sparse distinct data values" (argument `SDDV`) may +be adjusted to use the hash sort instead of the quick sort. + E.g. when number of unique values for sorting is less then + some *N* then an ordered hash table is used to store the data + and their count and sort them. + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +*Note!* Due to improper memory reporting/releasing for hash + tables in FCMP procedure the report memory used after running + the function may not be in line with the RAM memory required + for processing. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +call quickSortHashSDDV(A, SDDV) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Argument is a 1-based array of numeric values. + +2. `SDDV` - A number of distinct data values, e.g. 100'000. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 99'999'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(100000000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortHashSDDV (test, 2e4); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 9'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(10000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortHashSDDV (test, 2e4); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `quickSortLight()` subroutine: <<< ####################### + +The **quickSortLight()** subroutine is an alternative to the +`CALL SORTN()` subroutine for 1-based big arrays (i.e. `> 10'000'000` elements) +when memory used by `call sortn()` may be an issue. +For smaller arrays the memory footprint is not significant. + +The subroutine is based on an iterative quick sort algorithm +implemented in the `qsortInCbyProcProto()` *C* prototype function. + +*Caution!* Array parameters to subroutine calls *must* be 1-based. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +call quickSortLight(A) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `A` - Argument is a 1-based array of numeric values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** For session with 8GB of RAM + Array of size 250'000'000 with values in range + from 0 to 99'999'999 and around 10% of various + missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let size = 250000000; + options fullstimer; + + data _null_; + array test[&size.] _temporary_ ; + + array m[0:27] _temporary_ + (._ . .A .B .C .D .E .F .G .H .I .J .K .L + .M .N .O .P .Q .R .S .T .U .V .W .X .Y .Z); + + t = time(); + call streaminit(123); + do _N_ = &size. to 1 by -1; + _I_ + 1; + if rand("uniform") > 0.1 then test[_I_] = int(100000000*rand("uniform")); + else test[_I_] = m[mod(_N_,28)]; + end; + t = time() - t; + put "Array population time: " t; + + put "First 50 elements before sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + + t = time(); + call quickSortLight (test); + t = time()-t; + put "Sorting time: " / t=; + + put; put "First 50 elements after sorting:"; + do _N_ = 1 to 20; + put test[_N_] = @; + end; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**Example 2.** Resources comparison for + session with 8GB of RAM. + + Array of size 250'000'000 with random values + from 0 to 999'999'999 and _NO_ missing values. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 8.82s + memory 1'953'470.62k + OS Memory 1'977'436.00k + + Call quickSort4NotMiss: + Sorting time 66.92s + Memory 1'954'683.06k + OS Memory 1'977'436.00k + + Call quickSortLight: + Sorting time 70.98s + Memory 1'955'479.71k + OS Memory 1'977'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Example 3.** Resources comparison for + session with 8GB of RAM + + A) Array of size 10'000'000 with + random values from 0 to 9'999 range (sparse) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 0.61s + Memory 78'468.50k + OS Memory 101'668.00k + + Call sortn: + Sorting time 0.87s + Memory 1'120'261.53k + OS Memory 1'244'968.00k + + Call quickSortHash: + Sorting time 6.76s + Memory 1'222'242.75k(*) + OS Memory 1'402'920.00k(*) + + Call quickSortLight: + Sorting time 23.45s + Memory 80'527.75k + OS Memory 101'924.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + B) Array of size 10'000'000 with + random values from 0 to 99'999'999 range (dense) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 0.6s + Memory 78'463.65k + OS Memory 101'924.00k + + Call sortn: + Sorting time 1.51s + Memory 1'120'253.53k + OS Memory 1'244'968.00k + + Call quickSortHash: + Sorting time 6.28s + Memory 1'222'241.93k(*) + OS Memory 1'402'920.00k(*) + + Call quickSortLight: + Sorting time 0.78s + Memory 80'669.28k + OS Memory 102'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + C) Array of size 250'000'000 with + random values from 0 to 999'999'999 range (dense) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 15.34s + memory 1'953'471.81k + OS Memory 1'977'436.00k + + Call sortn: + FATAL: Insufficient memory to execute DATA step program. + Aborted during the COMPILATION phase. + ERROR: The SAS System stopped processing this step + because of insufficient memory. + + Call quickSortHash: + Sorting time 124.68s + Memory 7'573'720.34k(*) + OS Memory 8'388'448.00k(*) + + Call quickSortLight: + Sorting time 72.41s + Memory 1'955'520.78k + OS Memory 1'977'180.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + D) Array of size 250'000'000 with + random values from 0 to 99'999 range (sparse) + and around 10% of missing data. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + Array: + Population time 16.07 + Memory 1'953'469.78k + OS Memory 1'977'180.00k + + Call sortn: + FATAL: Insufficient memory to execute DATA step program. + Aborted during the COMPILATION phase. + ERROR: The SAS System stopped processing this step + because of insufficient memory. + + Call quickSortHash: + Sorting time 123.5s + Memory 7'573'722.03k + OS Memory 8'388'448.00k + + Call quickSortLight: + Sorting time 1'338.25s + Memory 1'955'529.90k + OS Memory 1'977'436.00k +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +(*) When using hash tables in `Proc FCMP` the RAM + usage is not indicated properly. The memory + allocation is reported up to the session limit + and then reused if needed. The really required + memory is in fact much less then reported. + +--- + +## >>> `%dedupListS()` macro: <<< ####################### + +The `%dedupListS()` macro deletes duplicated values from +a *SPACE separated* list of values. List, including separators, +can be no longer than a value carried by a single macrovariable. + +Returned value is *unquoted*. + +The `%dedupListS()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dedupListS( + list of space separated values +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *space separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListS(a b c b c)*; + + %put *%dedupListS(a b,c b,c)*; + + %put *%dedupListS(%str(a b c b c))*; + + %put *%dedupListS(%str(a) %str(b) %str(c) b c)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4 5 6 1 2 3 1 2 3 4 5 6; + %put *%dedupListS(&list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%dedupListC()` macro: <<< ####################### + +The `%dedupListC()` macro deletes duplicated values from +a *COMMA separated* list of values. List, including separators, +can be no longer than a value carried by a single macrovariable. + +Returned value is *unquoted*. Leading and trailing spaces are ignored. + +The `%dedupListC()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dedupListC( + list,of,comma,separated,values +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *comma separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListC(a,b,c,b,c)*; + + %put *%dedupListC(a,b c,b c)*; + + %put *%dedupListC(%str(a,b,c,b,c))*; + + %put *%dedupListC(%str(a),%str(b),%str(c),b,c)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Leading and trailing spaces are ignored. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListC( a , b b , c , b b, c )*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 3.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6; + %put *%dedupListC(&list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%dedupListP()` macro: <<< ####################### + +The `%dedupListP()` macro deletes duplicated values from +a *PIPE(`|`) separated* list of values. List, including separators, +can be no longer than a value carried by a single macrovariable. + +Returned value is *unquoted*. Leading and trailing spaces are ignored. + +The `%dedupListP()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dedupListP( + list|of|pipe|separated|values +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *pipe separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListP(a|b|c|b|c)*; + + %put *%dedupListP(a|b c|b c)*; + + %put *%dedupListP(%str(a|b|c|b|c))*; + + %put *%dedupListP(%str(a)|%str(b)|%str(c)|b|c)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Leading and trailing spaces are ignored. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListP( a | b b | c | b b| c )*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 3.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4|5|6|1|2|3|1|2|3|4|5|6; + %put *%dedupListP(&list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%dedupListX()` macro: <<< ####################### + +The `%dedupListX()` macro deletes duplicated values from +a *X separated* list of values, where the `X` represents +a *single character* separator. List, including separators, +can be no longer than a value carried by a single macrovariable. + +**Caution.** The value of `X` *has to be* in **the first** byte of the list, + just after the opening bracket, i.e. `(X...)`. + +Returned value is *unquoted*. Leading and trailing spaces are ignored. + +The `%dedupListX()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dedupListX( +XlistXofXxXseparatedXvalues +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *X separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListX(|a|b|c|b|c)*; + + %put *%dedupListX( a b c b c)*; + + %put *%dedupListX(,a,b,c,b,c)*; + + %put *%dedupListX(XaXbXcXbXc)*; + + %put *%dedupListX(/a/b/c/b/c)*; + + data _null_; + x = "%dedupListX(%str(;a;b;c;b;c))"; + put x=; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Leading and trailing spaces are ignored. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%dedupListX(| a | b.b | c | b.b| c )*; + + %put *%dedupListX(. a . b b . c . b b. c )*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 3.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4$5.5$6$1$2$3$1$2$3$4$5.5$6; + %put *%dedupListX($&list.)*; + + %let list = 4$ 5.5$ 6$ 1$ 2$ 3$ 1$ 2$ 3$ 4$ 5.5$ 6$; + %put *%dedupListX( &list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%QdedupListX()` macro: <<< ####################### + +The `%QdedupListX()` macro deletes duplicated values from +a *X separated* list of values, where the `X` represents +a *single character* separator. List, including separators, +can be no longer than a value carried by a single macrovariable. + +**Caution.** The value of `X` *has to be* in **the first** byte of the list, + just after the opening bracket, i.e. `(X...)`. + +Returned value is **quoted** with `%superq()`. Leading and trailing spaces are ignored. + +The `%QdedupListX()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%QdedupListX( +XlistXofXxXseparatedXvalues +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - A list of *X separated* values. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Basic use-case one. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%QdedupListX(|a|b|c|b|c)*; + + %put *%QdedupListX( a b c b c)*; + + %put *%QdedupListX(,a,b,c,b,c)*; + + %put *%QdedupListX(XaXbXcXbXc)*; + + %put *%QdedupListX(/a/b/c/b/c)*; + + %put *%QdedupListX(%str(;a;b;c;b;c))*; + + %put *%QdedupListX(%nrstr(&a&b&c&b&c))*; + + %put *%QdedupListX(%nrstr(%a%b%c%b%c))*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 2.** Leading and trailing spaces are ignored. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put *%QdedupListX(| a | b.b | c | b.b| c )*; + + %put *%QdedupListX(. a . b b . c . b b. c )*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 3.** Macro variable as an argument. + Delete duplicated values from a list. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %let list = 4$5.5$6$1$2$3$1$2$3$4$5.5$6; + %put *%QdedupListX($&list.)*; + + %let list = 4$ 5.5$ 6$ 1$ 2$ 3$ 1$ 2$ 3$ 4$ 5.5$ 6$; + %put *%QdedupListX( &list.)*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `brackets.` format: <<< ####################### + +The **brackets** format adds brackets around a text or a number. +Leading and trailing spaces are dropped before adding brackets. + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + input x; + if x < 0 then put x= brackets.; + else put x= best32.; +cards; +2 +1 +0 +-1 +-2 +; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `semicolon.` format: <<< ####################### + +The **semicolon** format adds semicolon after text or number. +Leading and trailing spaces are dropped before adding semicolon. + +### EXAMPLES AND USECASES: #################################################### + +**Example 1.** + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; + x = 1; + y = "A"; + put x= semicolon. y= $semicolon.; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `bracketsC()` function: <<< ####################### + +The **bracketsC()** function is internal function used by the *brackets* format. +Returns character value of length 32767. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +bracketsC(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Character value. + +--- + +## >>> `bracketsN()` function: <<< ####################### + +The **bracketsN()** function is internal function used by the *brackets* format. +Returns character value of length 34. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +bracketsN(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Numeric value. + +--- + +## >>> `semicolonC()` function: <<< ####################### + +The **semicolonC()** function is internal function used by the *semicolon* format. +Returns character value of length 32767. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +semicolonC(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Character value. + +--- + +## >>> `semicolonN()` function: <<< ####################### + +The **semicolonN()** function is internal function used by the *semicolon* format. +Returns character value of length 33. + +### SYNTAX: ################################################################### + +The basic syntax is the following: +~~~~~~~~~~~~~~~~~~~~~~~sas +semicolonN(X) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `X` - Numeric value. + +--- + +## >>> `%QzipEvalf()` macro: <<< ####################### + +The zipEvalf() and QzipEvalf() macro functions +allow to use a function on elements of pair of +space separated lists. + +For two space separated lists of text strings the corresponding +elements are taken and the macro applies a function, provided by user, +to calculate result of the function on taken elements. + +When one of the lists is shorter then elements are "reused" starting +from the beginning. + +The zipEvalf() returns unquoted value [by %unquote()]. +The QzipEvalf() returns quoted value [by %superq()]. + +See examples below for the details. + +The `%QzipEvalf()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%QzipEvalf( + first + ,second + <,function=> + <,operator=> + <,argBf=> + <,argMd=> + <,argAf=> + <,format=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `first` - *Required*, a space separated list of texts. + +2. `second` - *Required*, a space separated list of texts. + +* `function = cat` - *Optional*, default value is `cat`, + a function which will be applied + to corresponding pairs of elements of + the first and the second list. + +* `operator =` - *Optional*, default value is empty, + arithmetic infix operator used with elements + the first and the second list. The first + list is used on the left side of the operator + the second list is used on the right side + of the operator. + +* `argBf =` - *Optional*, default value is empty, + arguments of the function inserted + *before* elements the first list. + If multiple should be comma separated. + +* `argMd =` - *Optional*, default value is empty, + arguments of the function inserted + *between* elements the first list and + the second list. + If multiple should be comma separated. + +* `argAf =` - *Optional*, default value is empty, + arguments of the function inserted + *after* elements the second list. + If multiple should be comma separated. + +* `format=` - *Optional*, default value is empty, + indicates a format which should be used + to format the result, does not work when + the `operator=` is used. + +### EXAMPLES AND USECASES: #################################################### + +See examples in `%zipEvalf()` help for the details. + +--- + +## >>> `%zipEvalf()` macro: <<< ####################### + +The zipEvalf() and QzipEvalf() macro functions +allow to use a function on elements of pair of +space separated lists. + +For two space separated lists of text strings the corresponding +elements are taken and the macro applies a function, provided by user, +to calculate result of the function on taken elements. + +When one of the lists is shorter then elements are "reused" starting +from the beginning. + +The zipEvalf() returns unquoted value [by %unquote()]. +The QzipEvalf() returns quoted value [by %superq()]. + +See examples below for the details. + +The `%zipEvalf()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%zipEvalf( + first + ,second + <,function=> + <,operator=> + <,argBf=> + <,argMd=> + <,argAf=> + <,format=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `first` - *Required*, a space separated list of texts. + +2. `second` - *Required*, a space separated list of texts. + +* `function = cat` - *Optional*, default value is `cat`, + a function which will be applied + to corresponding pairs of elements of + the first and the second list. + +* `operator =` - *Optional*, default value is empty, + arithmetic infix operator used with elements + the first and the second list. The first + list is used on the left side of the operator + the second list is used on the right side + of the operator. + +* `argBf =` - *Optional*, default value is empty, + arguments of the function inserted + *before* elements the first list. + If multiple should be comma separated. + +* `argMd =` - *Optional*, default value is empty, + arguments of the function inserted + *between* elements the first list and + the second list. + If multiple should be comma separated. + +* `argAf =` - *Optional*, default value is empty, + arguments of the function inserted + *after* elements the second list. + If multiple should be comma separated. + +* `format=` - *Optional*, default value is empty, + indicates a format which should be used + to format the result, does not work when + the `operator=` is used. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple concatenation of elements: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, q w e r t y); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Shorter list is "reused": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, a b c); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Use of the `operator=`, shorter list is "reused": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let y = %zipEvalf(1 2 3 4 5 6, 100 200, operator = +); +%put &=y; + +%let z = %zipEvalf(1 2 3 4 5 6 8 9 10, 1 2 3 4 5 6 8 9 10, operator = **); +%put &=z; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Format result: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, q w e r t y, format=$upcase.); +%put &=x; + +%put * +%zipEvalf( + ą ż ś ź ę ć ń ó ł +,Ą Ż Ś Ź Ę Ć Ń Ó Ł +,format = $brackets. +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** Use with macrovariables: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let abc = 10 100 1000; +%put * +%zipEvalf( +%str(1 2 3 4 5 6 7 8 9) +,&abc. +,function = sum +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** If one of elements is empty: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put * +%zipEvalf( + abc efg +, +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** Use of the `function=`, shorter list is "reused": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put * +%zipEvalf( + a b c +,efg +,function = catx +,argBf = %str(,) +,format = $brackets. +) +*; + +%put * +%zipEvalf( + a b c +,efg +,function = catx +,argBf = %str( ) +,format = $upcase. +) +*; + +%put * +%zipEvalf( + %str(! @ # $ [ ] % ^ & * ) +,1 2 3 4 5 6 7 8 9 +,function = catx +,argBf = %str( ) +,format = $quote. +) +*; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 8.** Use inside resolve: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data _null_; +z = resolve(' +%zipEvalf( + %nrstr(! @ # $ [ ] % ^ & *) +,1 2 3 4 5 6 7 8 9 +,function = catx +,argBf = %str(.) +,format = $quote. +)'); +put z=; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 9.** Use in data step: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test; + %zipEvalf( + a b c d e f g + ,1 2 3 4 5 6 7 + ,function = catx + ,argBf = = + ,format = $semicolon. + ) +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 10.** With 9.4M6 hashing() function: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %zipEvalf(MD5 SHA1 SHA256 SHA384 SHA512 CRC32, abcd, function = HASHING); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 11.** Use middle argument: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let x = %zipEvalf(1 2 3 4 5 6, 2020, argMd=5, function=MDY, format=date11.); +%put &=x; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%functionExists()` macro: <<< ####################### + +The functionExists() macro function tests +if given funcion exists in the SAS session. +The `sashelp.vfunc` view is used. + +See examples below for the details. + +The `%functionExists()` macro executes like a pure macro code. + +The function is a result of cooperation with [Allan Bowe](https://www.linkedin.com/in/allanbowe/) + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%functionExists( + funName +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `funName` - *Required*, the name of the function + existence of which you are testing. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Test if function exists: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %functionExists(HASHING); + + %put %functionExists(COSsinLOG); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%RainCloudPlot()` macro: <<< ####################### + +The RainCloudPlot() macro allow to plot Rain Cloud plots, i.e. pots of +kernel density estimates, jitter data values, and box-and-whiskers plot. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%RainCloudPlot( + DS + ,gr + ,vars + + <,WidthPX=> + <,HeightPX=> + <,boxPlot=> + <,roundFactor=> + <,rainDropSize=> + <,boxPlotSymbolSize=> + <,colorsList=> + <,monochrome=> + <,antialiasMax=> + <,title=> + <,footnote=> + <,catLabels=> + <,xLabels=> + <,catLabelPos=> + <,xLabelPos=> + <,catLabelAttrs=> + <,xLabelAttrs=> + <,formated=> + <,y2axis=> + <,y2axisLevels=> + <,y2axisValueAttrs=> + <,catAxisValueAttrs=> + <,xaxisValueAttrs=> + <,xaxisTickstyle=> + <,sganno=> + <,odsGraphicsOptions=> + <,sgPlotOptions=> + + <,VSCALE=> + <,KERNEL_K=> + <,KERNEL_C=> + + <,cleanTempData=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `DS` - *Required*, name of the dataset from + which variables are to be taken. + +2. `gr` - *Required*, name of the grouping variable. + When more than one variable is specified + separate plots are rendered. + Can be numeric or character. + +3. `vars` - *Required*, name of the aggregated numeric variable. + When more than one variable is specified + separate plots are rendered. + +***Plot related options***: + +* `WidthPX` - *Optional*, default value `1200`. + Total width of the plot in pixels. + +* `HeightPX` - *Optional*, default value `220`. + Partial height of the plot in pixels. + Total height is calculated as `#GROUPS x HeightPX`. + +* `boxPlot` - *Optional*, default value `1`. + Indicates if the Box Plot should be added. + +* `roundFactor` - *Optional*, default value `0.000001`. + Rounding level when calculating maximum value + of the cloud chart. Should be adjusted to data + granularity level, e.g. for data with value + around `1e-8` should be decreased. + +* `rainDropSize` - *Optional*, default value `5px`. + Size of data points in the "rain" plot. + +* `boxPlotSymbolSize` - *Optional*, default value `8px`. + Size of symbols on the box plot. + +* `colorsList` - *Optional*, default value is empty. + List of colours for plotting. + Empty indicates that the default list will be used. + +* `monochrome` - *Optional*, default value `0`. + Indicates if the default list of colours should be gray-scale. + +* `antialiasMax` - *Optional*, default value is empty. + Sets a value to the ODS graphics `ANTIALIASMAX` option. + When empty the value is calculated from data. + +* `title` - *Optional*, default value - see notes below. + Provides a list of titles printed on the plot. + For details see notes below. + +* `footnote` - *Optional*, default value - see notes below. + Provides a list of titles printed on the plot. + For details see notes below. + +* `catLabels` - *Optional*, default value is empty. + List of values for group axix labels (vertical). + When empty a grouping variable name is used. + For details see notes below. + +* `xLabels` - *Optional*, default value is empty. + List of values for data variable axix labels (horizontal). + When empty a data variable name is used. + For details see notes below. + +* `catLabelPos` - *Optional*, default value `DATACENTER`. + Indicates position of the label on group axix (vertical). + Allowed values are `BOTTOM`, `CENTER`, `DATACENTER`, and `TOP`. + +* `xLabelPos` - *Optional*, default value `DATACENTER`. + Indicates position of the label on data axix (horizontal). + Allowed values are `LEFT`, `CENTER`, `DATACENTER`, and `RIGHT`. + +* `catLabelAttrs` - *Optional*, default value is empty. + List of attributes for group axix labels (vertical). + For details see notes below. + +* `xLabelAttrs` - *Optional*, default value is empty. + List of attributes for data variable axix labels (horizontal). + For details see notes below. + +* `formated` - *Optional*, default value `0`. + Indicates if values of the grouping variable should be formated. + +* `y2axis` - *Optional*, default value `1`. + Indicates if the right vertical axix should be displayed. + +* `y2axisLevels` - *Optional*, default value `4`. + Indicates if the number of expected levels of values printed + on the right vertical axix. + +* `y2axisValueAttrs` - *Optional*, default value `Color=Grey`. + Allows to modify Y2 axis values attributes. + +* `catAxisValueAttrs` - *Optional*, default value `Color=Black`. + Allows to modify category (Y) axis values attributes. + +* `xaxisValueAttrs` - *Optional*, default value `Color=Grey`. + Allows to modify X axis values attributes. + +* `xaxisTickstyle` - *Optional*, default value `INSIDE`. + Allows to modify X axis tick style. + Allowed values are `OUTSIDE`, `INSIDE`, `ACROSS`, and `INBETWEEN`. + *For SAS previous to* **9.4M5** *set to missing!* + +* `sganno` - *Optional*, default value is empty. + keeps name of a data set for the `sganno=` option + of the SGPLOT procedure. + +* `sgPlotOptions` - *Optional*, default value is `noautolegend noborder`. + List of additional options values for SGPLOT procedure. + +* `odsGraphicsOptions` - *Optional*, default value is empty. + List of additional options values for `ODS Graphics` statement. + By default only the: `width=`, `height=`, and `antialiasmax=` + are modified. + + +***Stat related options***: + +* `VSCALE` - *Optional*, default value `Proportion`. + Specifies the scale of the vertical axis. + Allowed values are `PROPORTION`, `PERCENT`, and `COUNT`. + `PROPORTION` scales the data in units of proportion of observations per data unit. + `PERCENT` scales the data in units of percent of observations per data unit. + `COUNT` scales the data in units of the number of observations per data unit. + +* `KERNEL_K` - *Optional*, default value `NORMAL`. + Specifies type of kernel function to compute kernel density estimates. + Allowed values are `NORMAL`, `QUADRATIC`, and `TRIANGULAR`. + + +* `KERNEL_C` - *Optional*, default value `1`. + Specifies standardized bandwidth parameter *C* to compute kernel density estimates. + Allowed values are between `0` and `1`, + +***Other options***: + +* `cleanTempData` - *Optional*, default value `1`. + Indicates if temporary data sets should be deleted. + +--- + +### NOTES: ################################################################### + +* Default value of the `title` option is: + `%nrstr(title1 JUSTIFY=C "Rain Cloud plot for &list_g. by " %unquote(&xLabel.);)` + Use the `%str()` or `%nrstr()` macro-function to handle special characters. + The `%unquote()` is used when resolving the parameter. + +* Default value of the `footnote` option is: + `%nrstr(footnote1 JUSTIFY=L COLOR=lightGray HEIGHT=1 "by RainCloudPlot macro from the BasePlus package";)` + Use the `%str()` or `%nrstr()` macro-function to handle special characters. + The `%unquote()` is used when resolving the parameter. + +* The `catLabels` and `xLabels` should be quoted comma separated lists enclosed with brackets, + e.g. `catLabels=("Continent of Origin", "Car Type")`, see Example below. + +* The `catLabelAttrs` and `xLabelAttrs` should be space separated lists of `key=value` pairs, + e.g. `xLabelAttrs=size=12 color=Pink weight=bold`, see Example below. + +* Kernel density estimates and basic statistics are calculated with `PROC UNIVARIATE`. + +* Plot is generated by `PROC SGPLOT` with `BAND`, `SCATTE`, and `POLYGON` plots. + +* After execution the ODS graphics dimension parameters are set to `800px` by `600px`. + +* SAS notes (`NOTE:`) are disabled for the execution time. + +* List of predefined colours is: + `BlueViolet`, `RoyalBlue`, `OliveDrab`, `Gold`, `HotPink`, `Crimson`, + `MediumPurple`, `CornflowerBlue`, `YellowGreen`, `Goldenrod`, `Orchid`, `IndianRed`. + +### BOX-AND-WHISKERS PLOT: ################################################################### + +The box-and-whiskers plot has the following interpretation: +- left vertical bar indicates the minimum, +- left whisker line starts at `max(Q1 - 1.5IQR, minimum)` and ends at lower quartile (Q1), +- diamond indicates mean, +- vertical bar inside of the box indicates median, +- right whisker line starts at upper quartile (Q3) and ends at `min(Q3 + 1.5IQR, maximum)`, +- right vertical bar indicates the maximum. + +With above setup it may happen that +there is a gap between the minimum marker and the beginning of the left whisker +or +there is a gap between the end of the right whisker and the maximum marker. +See examples below. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple Rain Cloud Plot for a `have` dataset: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + + data have; + g = "Aaa"; + do _N_ = 1 to 50; + x = rannor(42); + output; + end; + + g = "Bb"; + do _N_ = 1 to 120; + select (mod(_N_,9)); + when(1,2,3,4,5) x = 0.5*rannor(42)+1; + when(6,7,8) x = 0.5*rannor(42)+3; + otherwise x = 0.5*rannor(42)+5; + end; + output; + end; + + g = "C"; + do _N_ = 1 to 60; + x = 3*rannor(42)+7; + output; + end; + run; + + %RainCloudPlot(have, g, x) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The output: +![Example 1](./baseplus_RainCloudPlot_Ex1.png) + + + +**EXAMPLE 2.** Rain Cloud plot for `sashelp.cars` dataset + with groups by Origin or Type + for Invoice variables: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + + %RainCloudPlot( + sashelp.cars(where=(Type ne "Hybrid")) + , Origin Type + , Invoice + , HeightPX=300 + , y2axisLevels=3 + , catLabels=("Continent of Origin", "Car Type") + , xLabels="Invoice, [$]" + , xLabelAttrs=size=12 color=Pink weight=bold + ) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The output: +![Example 2a](./baseplus_RainCloudPlot_Ex2a.png) +![Example 2b](./baseplus_RainCloudPlot_Ex2b.png) + + + +**EXAMPLE 3.** Rain Cloud plot with formatted groups + and annotations. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + + data annotation; + function="text"; + label="This graph is full(*ESC*){sup '2'} of annotations!"; + drawspace="graphpercent"; + rotate=30; + anchor="center"; + textsize=32; + x1=50; + y1=50; + textcolor="red"; + justify="center"; + textweight="bold"; + width=100; + widthunit="percent"; + run; + + proc format; + value system + 1="Windows" + 2="MacOS" + 3="Linux" + ; + run; + + data test; + do system = 1 to 3; + do i = 1 to 50; + x = rannor(123)/system; + output; + end; + end; + format system system.; + run; + + + %RainCloudPlot(test, system, x + , colorslist=CX88CCEE CX44AA99 CX117733 + , formated=1 + , sganno=annotation + , sgPlotOptions=noborder + , WidthPX=1000 + , HeightPX=320 + , catAxisValueAttrs=Color=Green weight=bold + ) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The output: +![Example 3](./baseplus_RainCloudPlot_Ex3.png) + +--- + +## >>> `%zipLibrary()` macro: <<< ####################### + +The zipLibrary() macro allows to zip content of a SAS library. + +Files can be zipped into a single file (named as the input library) +or into multiple files (named as "dataset.sas7bdat.zip"). +If a file is indexed also the index file is zipped. + +Source files can be deleted after compression. + +Status of compression and processing time is reported. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary( + lib + <,mode=> + <,clean=> + <,libOut=> + <,compression=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `lib` - *Required*, a name of the library to be zipped. + Must be a valid SAS V7, V8, or V9 library. + + +* `mode = S` - *Optional*, default value is `S`, + indicates mode of compression + generates single zip file (`SINGLE/S`) + or multiple files (`MULTI/M`) + +* `clean = 0` - *Optional*, default value is `0`, + should datasets be deleted after zipping? + `1` means *yes*, `0` means *no*. + +* `libOut =` - *Optional*, default value is empty, + output library for a single zip file. + +* `compression =` - *Optional*, default value is `6`, + specifies the compression level + `0` to `9`, where `0` is no compression + and `9` is maximum compression. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Generate data: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + +options dlcreatedir; + libname test1 "%sysfunc(pathname(work))/test1"; + libname test2 "%sysfunc(pathname(work))/test2"; + libname test3 (test1 test2); + libname test4 "%sysfunc(pathname(work))/test4"; +options nodlcreatedir; + +%put %sysfunc(pathname(test3)); +%put %sysfunc(pathname(test4)); + +data + test1.A(index=(model)) + test1.B + test2.C + test2.D(index=(model make io=(invoice origin))) +; + set sashelp.cars; +run; + +data test1.B2 / view=test1.B2; + set test1.B; + output; + output; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Zip content of test3 library + into the same location in one zip file: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(test3) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Zip content of test3 library + into the same location in multiple zip files: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(test3, mode=MULTI) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Zip content of test3 library + with maximum compression level + into different location in one zip file + and delete source files: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(test3, clean=1, libOut=test4, compression=9) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%unzipLibrary()` macro: <<< ####################### + +The unzipLibrary() macro allows to unzip content of a SAS library. +It is a *counterpart* to the `%zipLibrary()` macro and is *not* intended to work +with zip files generated by other software (though it may in some cases). + +Files can be unzipped from a single file +or from multiple files (named e.g. "dataset.sas7bdat.zip"). +If a file is indexed also the index file is unzipped. + +Source files can be deleted after decompression. + +Status of decompression and processing time is reported. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%unzipLibrary( + path + <,zip=> + <,mode=> + <,clean=> + <,libOut=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `path` - *Required*, a path pointing to zipped file(s) location. + +* `zip =` - *Optional*, When `mode=S` a name of the + zip file containing SAS files to be unzipped. + +* `mode = S` - *Optional*, default value is `S`, + indicates mode of decompression + read from a single zip file (`SINGLE/S`) + or from multiple files (`MULTI/M`) + +* `clean = 0` - *Optional*, default value is `0`, + should zip files be deleted after unzipping? + `1` means *yes*, `0` means *no*. + +* `libOut =` - *Optional*, default value is empty, + output library for a single zip file + decompression. + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Generate data: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + +options dlcreatedir; + libname test1 "%sysfunc(pathname(work))/test1"; + libname test2 "%sysfunc(pathname(work))/test2"; + libname test3 (test1 test2); + libname test4 "%sysfunc(pathname(work))/test4"; +options nodlcreatedir; + +%put %sysfunc(pathname(test3)); +%put %sysfunc(pathname(test4)); + +data + test1.A(index=(model)) + test1.B + test2.C + test2.D(index=(model make io=(invoice origin))) +; + set sashelp.cars; +run; + +data test1.B2 / view=test1.B2; + set test1.B; + output; + output; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Use data from Example 1. + First zip content of the `test3` library + to `test4` location into one zip file + and delete source files. + Next unzip `test3.zip` library into the + `test4` location and delete the zip file. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(test3, clean=1, libOut=test4) + + +%unzipLibrary(%sysfunc(pathname(test4)), zip=test3, clean=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Use data from Example 1. + First zip content of the `test1` library + into multiple zip files and delete source files. + Next unzip `*.zip` files in `test1` + location and delete zipped files +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(test1, mode=M, clean=1) + + +%unzipLibrary(%sysfunc(pathname(test1)), mode=M, clean=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** First zip content of the `sashelp` library + into `work` library. + Next unzip `sashelp.zip` file in `work` + location and delete zip file. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%zipLibrary(sashelp, mode=S, clean=0, libOut=work) + + +%unzipLibrary(%sysfunc(pathname(work)), zip=sashelp, mode=S, clean=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%LDSN()` macro: <<< ####################### + +The LDSN (Long DataSet Names) macro function +allows to use an "arbitrary" text string to name a dataset. + +The LDSN macro has some limitation described below, to overcome them +another macro, with different name: LDSNM (Long DataSet Names Modified) +was created. See its description to learn how to use it. + +--- + +The idea for the macro came from the following story: + +Good friend of mine, who didn't use SAS for quite some time, +told me that he lost a few hours for debugging because +he forgot that the SAS dataset name limitation is 32 bytes. + +I replied that it shouldn't be a problem to do a workaround +for this inconvenience with a macro and the `MD5()` hashing function. + +I said: *The macro should take an "arbitrary string" for a dataset +name, convert it, with help of `MD5()`, to a hash digest, and +create a dataset with an "artificial" `hex16.` formated name.* + +Starting with something like this: + +~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSN(work. peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s (drop = sex rename=(name=first_name) where = (age in (12,13,14))) ); + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~ + +the macro would do: + +~~~~~~~~~~~~~~~~~~~~~~~sas +%sysfunc(MD5(peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s), hex16.) +~~~~~~~~~~~~~~~~~~~~~~~ + +and (under the hood) return and execute the following code: + +~~~~~~~~~~~~~~~~~~~~~~~sas +data work.DSN_41D599EF51FBA58_(drop = sex rename=(name=first_name) where = (age in (12,13,14))) ; + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~ + +Also in the next data step user should be able to do: + +~~~~~~~~~~~~~~~~~~~~~~~sas +data my_next_data_step; + set %DSN(work. peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s); +run; +~~~~~~~~~~~~~~~~~~~~~~~ + +and work without the "dataset-name-length-limitation" issue. + +--- + +See examples below for the details. + +The `%LDSN()` macro executes like a pure macro code. + +**Known "Limitations":** + +- dataset name _cannot_ contain dots (`.`) since they are used as separators! + +- dataset name _cannot_ contain round brackets(`(` and `)`) since they are used as separators + (but `[]` and `{}` are allowed)! + +- dataset name _cannot_ contain unpaired quotes (`'` and `"`), + text: `a "hot-dog"` is ok, but `John's dog` is not! + +**Behaviour:** + +- dataset name text is *converted to upcase* + +- dataset name text *leading and trailing spaces are ignored*, + e.g. the following will give the same hash digest: + `%ldsn(work.test)`, `%ldsn( work.test)`, `%ldsn(work.test )`, + `%ldsn(work .test)`, `%ldsn(work. test)`, `%ldsn(work . test)`. + +- macro calls of the form: + `data %LDSN(); run;`, `data %LDSN( ); run;`, `data %LDSN( . ); run;` or even + `data %LDSN( . (keep=x)); run;` are resolved to empty string, so the result is + equivalent to `data; run;` + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%LDSN( + arbitrary text string (in line with limitations) +) +~~~~~~~~~~~~~~~~~~~~~~~ + +The text string is concider as *"fully qualified dataset name"*, i.e. macro +assumes it may contain library as prefix and data set options as sufix. +See the `%LDsNm()` macro for comparison. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options nomprint source nomlogic nosymbolgen ls = max ps = max; + +data %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s (drop = sex rename=(name=first_name) where = (age in (12,13,14))) ); + set sashelp.class; +run; + +proc print data = %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ); +run; + +data MyNextDataset; + set %LDSN( work. peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ); + where age > 12; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%LDSNM()` macro: <<< ####################### + +The LDSNM (Long DataSet Names Modified) macro function +allows to use an "arbitrary" text string to name a dataset. + +The LDSN macro had some limitation (see its documentation), to overcome them +another `%LDSNM()` (Long DataSet Names Modified) macro was created. + +The main idea behind the `%LDSNM()` is the same as for `%LDSN()` - see the description there. + +--- + +The `%LDSNM()` macro works differently than the `%LDSN()` macro. + +The `%LDSN()` macro assumes that *both* libname and dataset options *are* +be passed as elements **inside** the macro argument, together with the data set name. E.g. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSN( WORK.peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s (drop = sex) ); + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The `%LDSNM()` macro, in contrary, assumes that both libname and dataset options are +passed **outside** the macro parameter, i.e. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data WORK.%LDSNM( peanut butter & jelly with a hot-dog in [a box] and s*t*a*r*s ) (drop = sex); + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This approach overcomes some limitations the LDSN has. + +The **additional** feature of the `%LDSNM()` is that when the macro is called, +a global macrovariable is created. +The macro variable name is the text of the hashed data set name. +The macro variable value is the text of the unhashed data set name (i.e. the argument of the macro). +For example the following macro call: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSNM(John "x" 'y' dog); + set sashelp.class; + where name = 'John'; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +creates macro variable with name `DSN_BF1F8C4D6495B34A_` and with value: `JOHN "X" 'Y' DOG`. + +The macrovariable is useful when combined with `symget()` function and +the `indsname=` option to get the original text string value back, +like in this example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test; + set %LDSNM(John "x" 'y' dog) indsname = i; + + indsname = symget(scan(i,-1,".")); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +See examples below for the details. + +--- + +The `%LDSN()` macro executes like a pure macro code. + +**Known "Limitations":** + +- dataset name _cannot_ contain _unpaired_ round brackets(`(` and `)`) + (but unmatched `[]` and `{}` are allowed)! + +- dataset name _cannot_ contain _unpaired_ quotes (`'` and `"`), + text: `a "hot-dog"` is ok, but `John's dog` is not! + +**Behaviour:** + +- dataset name text is *converted to upcase* + +- dataset name text *leading and trailing spaces are ignored*, + e.g. the following will give the same hash digest: + `%ldsn(test)`, `%ldsn( test)`, `%ldsn(test )`. + +- macro calls of the form: + `data %LDSN(); run;` or `data %LDSN( ); run;` are resolved + to empty string, so the result is equivalent to `data; run;` + +- created macrovariable is _global_ in scope. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%LDSNM( + arbitrary text string (in line with limitations) +) +~~~~~~~~~~~~~~~~~~~~~~~ + +The text string is considered as *"only dataset name"*, i.e. the macro does not +assume it contains library as prefix or data set options as suffix. +See the `%LDSN()` macro for comparison. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data %LDSNM(John "x" 'y' & dog); + set sashelp.class; + where name = 'John'; +run; + +data %LDSNM(John "x"[ 'y' & dog); + set sashelp.class; + where name = 'John'; +run; + +data %LDSNM(John "x" 'y'} & dog); + set sashelp.class; + where name = 'John'; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data work.%LDsNm( peanut butter & jelly, a hot-dog in [a box], and s(*)t(*)a(*)r(*)s!! ) (drop = sex rename=(name=first_name) where = (age in (12,13,14))) +; + set sashelp.class; +run; + +data test; + set work.%LDsNm( peanut butter & jelly, a hot-dog in [a box], and s(*)t(*)a(*)r(*)s!! ) indsname=i; + + indsname=symget(scan(i,-1,".")); +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data work.%LDsNm( . ); + set sashelp.class; +run; + +data %LDsNm( ); + set sashelp.class; +run; + + +data %LDsNm(); + set sashelp.class; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%LVarNm()` macro: <<< ####################### + +The LVarNm() macro function works like the LDSN() macro function, but for variables. +Supported by LVarNmLab() macro function which allows to remember "user names" in labels. + +The motivation for the macro was similar to that for the LDSN() macro. + +--- + +See examples below for the details. + +The `%LVarNm()` macro executes like a pure macro code. + +**Known "Limitations":** + +- variable name _cannot_ contain unpaired quotes (`'` and `"`), + text: `a "hot-dog"` is ok, but `John's dog` is not! + +**Behaviour:** + +- variable name text is *converted to upcase* + +- variable name text *leading and trailing spaces are ignored*, + e.g. the following will give the same hash digest: + `%LVarNm(test)`, `%LVarNm( test)`, `%LVarNm(test )`. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%LVarNm( + arbitrary text string (in line with limitations) +) +~~~~~~~~~~~~~~~~~~~~~~~ + +--- + + +### EXAMPLES AND USE CASES: #################################################### + +**EXAMPLE 1.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options ls=max; +data test; + %LVarNmLab( peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ) + + do %LVarNm( peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ) = 1 to 10; + + y = 5 + %LVarNm( peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ) * 17; + output; + end; +run; + +data test2; + set test; + where %LVarNm( peanut butter & jelly with a "Hot-Dog" in [a box], popcorn, and s*t*a*r*s ) < 5; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test3; + %LVarNmLab() = 17; + + %LVarNm() = 17; + + %LVarNm( ) = 42; + + %LVarNm( ) = 303; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test3; + %LVarNm(test) = 1; + + %LVarNm( test) = 2; + + %LVarNm(test ) = 3; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data test4; + array X[*] %LVarNm(some strange! name)_0 - %LVarNm(some strange! name)_10; + + do i = lbound(X) to hbound(X); + X[i] = 2**(i-1); + put X[i]=; + end; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +## >>> `%LVarNmLab()` macro: <<< ####################### + +The LVarNmLab() macro function supports LVarNm() and allows to remember "user names" in labels. + +The motivation for the macro was similar one as for the LDSN() macro. + +--- + +See examples in LVarNm() documentation for the details. + +The `%LVarNmLab()` macro executes like a pure macro code. + +**Known "Limitations":** + +- variable name _cannot_ contain unpaired quotes (`'` and `"`), + text: `a "hot-dog"` is ok, but `John's dog` is not! + +**Behaviour:** + +- variable name text is *converted to upcase* + +- variable name text *leading and trailing spaces are ignored*, + e.g. the following will give the same hash digest: + `%LVarNmLab(test)`, `%LVarNmLab( test)`, `%LVarNmLab(test )`. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%LVarNmLab( + arbitrary text string (in line with limitations) +) +~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%bpPIPE()` macro: <<< ####################### + +The bpPIPE() [Base Plus PIPE] macro executes OS command +and print to the log output of the execution. + +Under the hood it uses `_` filename reference to PIPE device. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%bpPIPE( ) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +* **NO Arguments** - Everything inside brackets is treated as an OS command. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** List, to the log, content of D and C drives: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %bpPIPE(D: & dir & dir "C:\") +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** List, to the log, content of `home` directory: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %bpPIPE(ls -halt ~/) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%dirsAndFiles()` macro: <<< ####################### + +The `%dirsAndFiles()` macro allows to extract info about all files +and subdirectories of a given `root` directory. + +The extracted info may be just a list of files and subdirectories or, if +the `details=` parameter is set to 1, additional operating system information +is extracted (information is OSS dependent and gives different results for Linux +and for Windows) + +The extracted info can be narrowed down to files (`keepFiles=1`) or to +directories (`keepDirs=1`) if need be. + +The extracted info can be presented in wide or long format (`longFormat=1`). + +The extracted info for files can be narrowed down to only files with particular +extension, for example: `fileExt=sas7bdat`. + +The extracted info can be narrowed down maximal path depth +by setting up the `maxDepth=` parameter. + +See examples below for the details. + +### REFERENCES: ################################################################### + +The macro is based on Kurt Bremser's "*Talking to Your Host*" article +presented at WUSS 2022 conference. + +The article is available [here](https://communities.sas.com/t5/SAS-User-Groups-Library/WUSS-Presentation-Talking-to-Your-Host/ta-p/838344) +and also as an additional content of this package. +The paper was awarded the "Best Paper Award - Programming". + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles( + root + <,ODS=> + <,details=> + <,keepDirs=> + <,keepFiles=> + <,longFormat=> + <,fileExt=> + <,maxDepth=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `root` - *Required*, path to be searched + for information. + +* `ODS=work.dirsAndFilesInfo` - *Optional*, output data set, + name of a dataset to store information. + +* `details=0` - *Optional*, indicates if detailed info + will be collected, `1` = yes, `0` = no. + +* `keepDirs=1` - *Optional*, indicates if directories info + will be collected, `1` = yes, `0` = no. + +* `keepFiles=1` - *Optional*, indicates if files info + will be collected, `1` = yes, `0` = no. + +* `longFormat=0` - *Optional*, indicates if output be + in long format, `1` = yes, `0` = no. + +* `fileExt=` - *Optional*, if not missing then indicates + file extension to filter out results. + +* `maxDepth=0` - *Optional*, if not zero then indicates + maximum depth of search in the root path. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Get list of files and directories: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Get detailed info: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result2,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Get only files info: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result3,keepDirs=0) + +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result5,keepDirs=0,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Get only directories info: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result4,keepFiles=0) + +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result6,keepFiles=0,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** Filter out by `sas` extension: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(~/,ODS=work.result7,fileExt=sas) + +%dirsAndFiles(~/,ODS=work.result8,fileExt=sas,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** Keep result in the long format: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(~/,ODS=work.result9,details=1,longFormat=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** Get info for maximum depth of 2: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(C:\SAS_WORK\,ODS=work.result10,details=1,maxDepth=2) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 8.** How locked/unavailable files are handled: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(%sysfunc(pathname(WORK)),ODS=work.result11,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 9.** Not existing directory: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%dirsAndFiles(%sysfunc(pathname(WORK))/noSuchDir,ODS=work.result12,details=1) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%repeatTxt()` macro: <<< ####################### + +The repeatTxt() macro function allows to repeat `n` +times a `text` string separated by string `s=`. + +The repeatTxt() returns unquoted value [by %unquote()]. + +See examples below for the details. + +The `%repeatTxt()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%repeatTxt( + text + <,n> + <,s=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `text` - *Required*, a text to be repeated. + +2. `n` - *Required/Optional*, the number of repetitions. + If missing then set to `1`; + +* `s = %str( )` - *Optional*, it is a separator between + repeated elements. Default value is space. +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple repetition of dataset name: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options mprint; +data work.test5; + set + %repeatTxt(sashelp.cars, 5) + ; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Simple repetition of data step: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options mprint; +%repeatTxt(data _null_; set sashelp.cars; run;, 3) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** "Nice" output: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repeatTxt(#,15,s=$) HELLO SAS! %repeatTxt(#,15,s=$); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Macroquote a text with commas: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%repeatTxt( + %str(proc sql; create table wh as select weight,height from sashelp.class; quit;) + ,3 +) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 5.** Empty `n` repeats `text` one time: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +options mprint; +data work.test1; + set + %repeatTxt(sashelp.cars) + ; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 6.** Dynamic "formatting": +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%macro printWork(); + %let work=%sysfunc(pathname(work)); + %put +%repeatTxt(~,%length(&work.)+5,s=)+; + %put {&=work.}; + %put +%repeatTxt(~,%length(&work.)+5,s=)+; +%mend printWork; + +%printWork() +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%repList()` macro: <<< ####################### + +The repList() macro function allows to repeat `T` +times elements of a `L` list, possibly `E` times each element, +separated by string `S`. + +See examples below for the details. + +The `%repList()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%repList( + list + <,times=> + <,each=> + <,lenghtOut=> + <,sep=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `list` - *Required*, a list of elements to be repeated. + List can be space or comma separated. + Elements can be in quotes. + For comma separated list add brackets + e.g., `%repList((A,B,C,D),times=5)`. + The list separators are: `<{[( ,;)]}>`. + +* `times=` - *Optional*, An integer indicating + the number of repetitions. + By default set to `1`. + + +* `each=` - *Optional*, A list of integers indicating + the number of repetitions of each element of the list + e.g., for a list `A B C` and the `each=2 4` the result + is `A A B B B B C C`. If the number of integers is less + then the length of the list values are recycled from + the beginning. + By default set to `1`. + +* `lenghtOut=` - *Optional*, An integer indicating + after what the number of repetitions process will stop. + By default set to `0` which means "do not stop". + +* `sep=` - *Optional*, it is a separator printed between + repeated elements. Mnemonics for *space* is `s`, + for *comma* is `c`, and for semicolon in `q`. + Default value is a single space. + + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple repetition of all elements: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repList((A,B,C,D), times=3); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Simple repetition of each element: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repList(("A",'B',"C",'D'), each=3); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Simple repetition with a separator: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repList(A10;B20;C30, times=3, each=2, sep=Q); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Recycle elements up to 8 with a comma as a separator: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put %repList(1 2 3, lenghtOut=8, sep=c); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 5.** Separate number of repetitions for each element: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put [%repList([D][C][B][A], each = 2 3 5 7, sep=] [)]; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**EXAMPLE 6.** "ASCII art" butterflies: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put {>%repList(! $ |, times = 2, each =2 1, sep=<} ... {>)<}; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** Data repeating: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +data A; + x=17; +data B; + x=42; +data C; + x=303; +run; + +data Times2_A10B11C12; + set + %repList(A B C, times = 2, each =10 11 12) + ; +run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +--- + + +## >>> `%intsList()` macro: <<< ####################### + +The intsList() macro function allows to print a list of +integers starting from `start` up to `end` incremented by `by` +and separated by `sep=`. + +If `start`, `end` or `by` are non-integers the are converted to integers. + +See examples below for the details. + +The `%intsList()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%intsList( + start + <,end> + <,by> + <,sep=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `start` - *Required*, the first value of the list. + If `end` is missing then the list is generated + from 1 to `start` by 1. + +2. `end` - *Required/Optional*, the last value of the list. + +3. `by` - *Required/Optional*, the increment of the list. + If missing then set to `1`. + *Cannot* be equal to `0`. + +* `s = %str( )` - *Optional*, it is a separator between + elements of the list. Default value is space. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Simple list of integers from 1 to 10 by 1: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %intsList(10); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Ten copies of `sashelp.class` in `test11` to `test20`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data + %zipEvalf(test, %intsList(11,20)) + ; + set sashelp.class; + run; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Non-integers are converted to integers, the list is `1 3 5`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %intsList(1.1,5.2,2.3); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** A list with a separator: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %intsList(1,5,2,sep=+); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%letters()` macro: <<< ####################### + +The letters() macro function allows to print a list of Roman +letters starting from `start` up to `end` incremented by `by`. +The letters list can be uppercases or lowercase (parameter `c=U` or `c=L`), +can be quoted (e.g. `q=""` or `q=[]`), and can be separated by `s=`. + +Values of `start`, `end`, and `by` have to be integers in range between 1 ad 26. + +See examples below for the details. + +The `%letters()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%letters( + range + <,c=> + <,q=> + <,s=> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `range` - *Required*, letters selector in form `start:end:by`. + Lists letters from `start` to `end` by `by`. + Values of `start`, `end`, and `by` are separated by + colon and must be between 1 ad 26. + If value is outside range it is set to + `start=1`, `en=26`, and `by=1`. If `end` is missing + then is set to value of `start`. + If `end` is smaller than `start` list is reversed + +* `c = U` - *Optional*, it is a lowercase letters indicator. + Select `L` or `l`. Default value is `U` for upcase. + +* `q = ` - *Optional*, it is a quite around elements of the list. + Default value is empty. Use `%str()` for one quote symbol. + If there are multiple symbols, only the first and the + second are selected as a preceding and trailing one, + e.g. `q=[]` gives `[A] [B] ... [Z]`. + +* `s = %str( )` - *Optional*, it is a separator between + elements of the list. Default value is space. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Space separated list of capital letters from A to Z: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26:1); + + %put %letters(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** First, thirteenth, and last letter: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1) %letters(13) %letters(26); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Every third lowercase letter, i.e. `a d g j m p s v y`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26:3,c=L); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Lists with separators: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26:2,s=#); + %put %letters(1:26:3,s=%str(;)); + %put %letters(1:26:4,s=%str(,)); + %put %letters(1:26,s=); + %put %letters(1:26,s==); + %put %letters(1:26,s=/); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** Every second letter with quotes: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26:2,q=%str(%')); + %put %letters(2:26:2,q=%str(%")); + + %put %letters(1:26:2,q=''); + %put %letters(2:26:2,q=""); + + %put %letters(1:26:2,q=<>); + %put %letters(2:26:2,q=\/); + + %put %letters(1:26:2,q=()); + %put %letters(2:26:2,q=][); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 6.** Mix of examples 4, 5, and 6: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(1:26,c=L,q='',s=%str(, )); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 7.** If `end` is smaller than `start` list is reversed: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %letters(26:1:2,q=''); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%splitDSIntoBlocks()` macro: <<< ####################### + +The splitDSIntoBlocks() macro allows to split the `set` dataset into blocks +of size `blockSize` in datasets: `prefix1` to `prefixN`. + +The last dataset may have less observations then the `blockSize`. + +Macro covers `BASE` engine (`v9`, `v8`, `v7`, `v6`) and `SPDE` engine datasets. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%splitDSIntoBlocks( + blockSize + <,set> + <,prefix> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `blockSize` - *Required*, the size of the block of data, + in other words number of observations in + one block of split data. + Block size must be positive integer. + +2. `set` - *Required/Optional*, the name of the dataset to split. + If empty then `&syslast.` is used. + +3. `prefix` - *Required/Optional*, the name-prefix for new datasets. + If missing then set to `part`. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Split `sashelp.class` into 5 elements datasets ABC1 to ABC4: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %splitDSIntoBlocks(5,sashelp.class,ABC) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** By default splits the `_last_` dataset into `part1` to `partN` datasets: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data lastData; + set sashelp.cars; + run; + + %splitDSIntoBlocks(123) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Works with `SPDE` engine too: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlcreatedir; + libname test "%sysfunc(pathname(work))/testSPDE"; + libname test; + libname test SPDE "%sysfunc(pathname(work))/testSPDE"; + + data test.test; + set sashelp.cars; + run; + + %splitDSIntoBlocks(100,test.test,work.spde) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%splitDSIntoParts()` macro: <<< ####################### + +The splitDSIntoParts() macro allows to split the `set` dataset into `parts` parts +of approximately `NOBS/parts` size in datasets: `prefix1` to `prefixN`. + +The splitDSIntoParts() macro internally runs the splitDSIntoBlocks() macro. + +Macro covers `BASE` engine (`v9`, `v8`, `v7`, `v6`) and `SPDE` engine datasets. + +See examples below for the details. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%splitDSIntoParts( + parts + <,set> + <,prefix> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `parts` - *Required*, the number of parts to split data into. + Number of parts must be positive integer. + +2. `set` - *Required/Optional*, the name of the dataset to split. + If empty then `&syslast.` is used. + +3. `prefix` - *Required/Optional*, the name-prefix for new datasets. + If missing then set to `part`. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Split `sashelp.cars` into 7 parts: datasets carsInParts1 to carsInParts7: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %splitDSIntoParts(7,sashelp.cars, carsInParts) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** By default splits the `_last_` dataset into `part1` to `part3` datasets: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + data lastData; + set sashelp.cars; + run; + + %splitDSIntoBlocks(3) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Works with `SPDE` engine too: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlcreatedir; + libname test "%sysfunc(pathname(work))/testSPDE"; + libname test; + libname test SPDE "%sysfunc(pathname(work))/testSPDE"; + + data test.test; + set sashelp.cars; + run; + + %splitDSIntoParts(3,test.test,work.spde) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%filePath()` macro: <<< ####################### + +The filePath() macro function returns path to a file, +it is a wrapper to `pathname()` function for files. + +See examples below for the details. + +The `%filePath()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%filePath( + fileref +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `fileref` - *Required*, a fileref from the `filename` statement. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Return path to temporary file: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + filename f temp; + %put %filePath(f); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%libPath()` macro: <<< ####################### + +The libPath() macro function returns path to a library, +it is a wrapper to `pathname()` function for libraries. + +See examples below for the details. + +The `%libPath()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%libPath( + libref +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `libref` - *Required*, a libref from the `libname` statement. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Return path to `WORK` library: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %libPath(WORK); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Return path to `SASHELP` library: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + %put %libPath(SASHELP); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%workPath()` macro: <<< ####################### + +The workPath() macro function returns path to the `WORK` library, +it is a wrapper to `pathname("work", "L")` function. + +See examples below for the details. + +The `%workPath()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%workPath() +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +*) No arguments. + +--- + +### EXAMPLES AND USECASES: #################################################### + +**EXAMPLE 1.** Create new library inside `WORK` library: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas + options dlCreateDir; + libname NEW "%workPath()/new"; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%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.30.0/baseplus.zip b/hist/1.30.0/baseplus.zip new file mode 100644 index 0000000000000000000000000000000000000000..37f2de5a71ea20a1eea54d57a49cdbb66057bd16 GIT binary patch literal 283708 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�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%0D2*ZHa8i_NgI$pIzvib`A2w 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%0Dbq2KlMNTem9%>+4S2#_4-`L;`i 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