From 827362b8e726dc52c55b2ab6cf93121d0cd26bba Mon Sep 17 00:00:00 2001 From: Bart Jablonski Date: Sat, 20 May 2023 17:25:28 +0200 Subject: [PATCH] The BasePlus package [ver. 1.24.1] The BasePlus package [ver. 1.24.1] - The `BasePlus` package, version `1.24.1` was regenerated with latest version of the framework. - The `%RainCloudPlot()` macro from the `BasePlus` packages was updated with new parameters: * `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. --- baseplus.md | 73 +- baseplus.zip | Bin 268480 -> 269048 bytes hist/1.24.1/baseplus.md | 4904 ++++++++++++++++++++++++++++++++++++++ hist/1.24.1/baseplus.zip | Bin 0 -> 269048 bytes 4 files changed, 4973 insertions(+), 4 deletions(-) create mode 100644 hist/1.24.1/baseplus.md create mode 100644 hist/1.24.1/baseplus.zip diff --git a/baseplus.md b/baseplus.md index 4b47153..e58b603 100644 --- a/baseplus.md +++ b/baseplus.md @@ -67,7 +67,7 @@ --- -# The BasePlus package [ver. 1.24.0] ############################################### +# The BasePlus package [ver. 1.24.1] ############################################### The **BasePlus** package implements useful functions and functionalities I miss in the BASE SAS. @@ -336,10 +336,10 @@ Package contains additional content, run: %loadPackageAddCnt(BasePlus) to load 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 20230411 * +* SAS package generated by generatePackage, version 20230520 * The SHA256 hash digest for package BasePlus: -`F*B297440903337E1AE6F12A6001B80B8AB743079847D16D63DF1C649AE51AA411` +`F*0CCAA009D64CC20ED315FA123C233E0383967E635EB8708E7A48EEE3767C6BC5` --- # Content description ############################################################################################ @@ -3118,7 +3118,9 @@ The basic syntax is the following, the `<...>` means optional parameters: <,y2axisValueAttrs=> <,xaxisValueAttrs=> <,xaxisTickstyle=> - + <,sganno=> + <,odsGraphicsOptions=> + <,sgPlotOptions=> <,VSCALE=> <,KERNEL_K=> @@ -3224,6 +3226,19 @@ The basic syntax is the following, the `<...>` means optional parameters: 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`. @@ -3354,6 +3369,56 @@ The output: ![Example 2b](./baseplus_RainCloudPlot_Ex2b.png) + +**EXAMPLE 3.** Rain Cloud plot with formated 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 30; + x = rannor(123)/system; + output; + end; + end; + format system system.; + run; + + + %RainCloudPlot(test, system, x + , formated=1 + , sganno=annotation + , sgPlotOptions=noborder + , WidthPX=2000 + , HeightPX=420 + ) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + --- ## >>> `%zipLibrary()` macro: <<< ####################### diff --git a/baseplus.zip b/baseplus.zip index 91ba7021ee8328af66abb13ee5a90729b278982a..0629f42948bb15685ad83d2b5048d78bec272380 100644 GIT binary patch delta 23350 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 Z_pe9!adKNCS`(mbMv#@zhzNFw_zx1F6np>x delta 22822 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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*. + +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 time 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); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +Package contains: +1. macro bppipe +2. macro deduplistc +3. macro deduplistp +4. macro deduplists +5. macro deduplistx +6. macro dirsandfiles +7. macro functionexists +8. macro getvars +9. macro intslist +10. macro ldsn +11. macro ldsnm +12. macro lvarnm +13. macro lvarnmlab +14. macro qdeduplistx +15. macro qgetvars +16. macro qzipevalf +17. macro raincloudplot +18. macro repeattxt +19. macro splitdsintoblocks +20. macro splitdsintoparts +21. macro symdelglobal +22. macro unziplibrary +23. macro zipevalf +24. macro ziplibrary +25. format bool +26. format boolz +27. format ceil +28. format floor +29. format int +30. function arrfill +31. function arrfillc +32. function arrmissfill +33. function arrmissfillc +34. function arrmisstoleft +35. function arrmisstoleftc +36. function arrmisstoright +37. function arrmisstorightc +38. function bracketsc +39. function bracketsn +40. function catxfc +41. function catxfi +42. function catxfj +43. function catxfn +44. function deldataset +45. function semicolonc +46. function semicolonn +47. format brackets +48. format semicolon +49. proto qsortincbyprocproto +50. function frommissingtonumberbs +51. function fromnumbertomissing +52. function quicksort4notmiss +53. function quicksorthash +54. function quicksorthashsddv +55. function quicksortlight +56. macro filepath +57. macro letters +58. macro libpath +59. macro translate +60. macro tranwrd +61. 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 20230520 * + +The SHA256 hash digest for package BasePlus: +`F*0CCAA009D64CC20ED315FA123C233E0383967E635EB8708E7A48EEE3767C6BC5` + +--- +# 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=> + <,formated=> + <,y2axis=> + <,y2axisLevels=> + <,y2axisValueAttrs=> + <,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. + +* `rainDropSiz` - *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`. + +* `formated` - *Optional*, default value `0`. + Indicates if values of the grouping variable should be formated. + +* `y2axis` - *Optional*, default value `1`. + Indicates if the righ 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. + +* `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. + +* 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, [$]" + ) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The output: +![Example 2a](./baseplus_RainCloudPlot_Ex2a.png) +![Example 2b](./baseplus_RainCloudPlot_Ex2b.png) + + + +**EXAMPLE 3.** Rain Cloud plot with formated 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 30; + x = rannor(123)/system; + output; + end; + end; + format system system.; + run; + + + %RainCloudPlot(test, system, x + , formated=1 + , sganno=annotation + , sgPlotOptions=noborder + , WidthPX=2000 + , HeightPX=420 + ) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%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() +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +## >>> `%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); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + +--- + +--- + +## 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.24.1/baseplus.zip b/hist/1.24.1/baseplus.zip new file mode 100644 index 0000000000000000000000000000000000000000..0629f42948bb15685ad83d2b5048d78bec272380 GIT binary patch literal 269048 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
  • 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�R$sfGUiv1D)>Z_>*6*k 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℘{O{#b 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