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