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