16 Commits

Author SHA1 Message Date
SASPAC - SAS Packages Archive
813fd251e5 Merge pull request #30 from SASPAC/dev
The BasePlus package [ver. 1.35.0]
2023-11-14 14:46:48 +01:00
Bart Jablonski
8903128f28 The BasePlus package [ver. 1.35.0]
The BasePlus package [ver. 1.35.0]

New `%downloadFilesTo()` macro added.
Macro allows conveniently download data from internet or local locations to a directory pointed by user.

Documentation updated.

---

SHA256 digest for BasePlus: `F*62344EAA8C0DD95CCB164B5C7A91B33865B3D19CD5A2A3EDAC4C31E0541D04C9`
2023-11-14 14:44:47 +01:00
SASPAC - SAS Packages Archive
be6023b73a Merge pull request #29 from SASPAC/dev
The BasePlus package [ver. 1.35.0]
2023-11-14 14:41:14 +01:00
Bart Jablonski
9326cd148c The BasePlus package [ver. 1.35.0]
The BasePlus package [ver. 1.35.0]

New `%downloadFilesTo()` macro added.
Macro allows conveniently download data from internet or local locations to a directory pointed by user.

Documentation updated.

---

SHA256 digest for BasePlus: `F*62344EAA8C0DD95CCB164B5C7A91B33865B3D19CD5A2A3EDAC4C31E0541D04C9`
2023-11-14 14:37:10 +01:00
SASPAC - SAS Packages Archive
b95c4154df Merge pull request #28 from SASPAC/dev
BasePlus package [ver. 1.34.0]
2023-11-11 17:32:59 +01:00
Bart Jablonski
d769d10a61 BasePlus package [ver. 1.34.0]
BasePlus package [ver. 1.34.0]

- update in unzipArch macro
- new zipArch macro added
- documentation updated
2023-11-11 17:31:17 +01:00
Bart Jablonski
d58133fa40 Merge pull request #27 from SASPAC/main
The BasePlus package [ver. 1.33.0]
2023-11-07 13:27:39 +01:00
Bart Jablonski
2d127ddb9f The BasePlus package [ver. 1.33.0]
## The BasePlus package [ver. 1.33.0]

- New macro [`%unzipArch()`](https://github.com/SASPAC/baseplus/blob/main/baseplus.md#unziparch-macro) added. The macro allows to extract ZIP archive file from SAS session and does not need `XCMD` (is OS independent).
- Documentation updated.

---
2023-11-07 13:21:43 +01:00
Bart Jablonski
c99c9f38f8 Merge pull request #26 from SASPAC/main
update to dev
2023-11-07 13:10:47 +01:00
Bart Jablonski
1cbc5de18f The BasePlus package [ver. 1.33.0]
## The BasePlus package [ver. 1.33.0]

- New macro [`%unzipArch()`](https://github.com/SASPAC/baseplus/blob/main/baseplus.md#unziparch-macro) added. The macro allows to extract ZIP archive file from SAS session and does not need `XCMD` (is OS independent).
- Documentation updated.

---

SHA256 digest for the latest version of `BasePlus`: F*6214654B4575DC8E4BA3CF032924862C2F69A03A6384872BAA9F774EDF6A8DDA
2023-11-07 12:53:30 +01:00
SASPAC - SAS Packages Archive
2cad099652 Merge pull request #25 from SASPAC/dev
The BasePlus package [ver. 1.32.0]
2023-10-26 13:51:16 +02:00
Bart Jablonski
bfd3a9d0d9 The BasePlus package [ver. 1.32.0]
The BasePlus package [ver. 1.32.0]

New `%monthShift()` macro added:

```sas
%put %monthShift(2023,1,-3);
```

Doc. updated.
2023-10-26 13:49:12 +02:00
SASPAC - SAS Packages Archive
ab7feaa15a Merge pull request #24 from SASPAC/dev
The BasePlus package [ver. 1.32.0]
2023-10-26 13:28:50 +02:00
Bart Jablonski
01b1300a55 The BasePlus package [ver. 1.32.0]
The BasePlus package [ver. 1.32.0]

New `%monthShift()` macro added:

```sas
%put %monthShift(2023,1,-3);
```

Doc. updated.
2023-10-26 13:27:22 +02:00
SASPAC - SAS Packages Archive
ce6f6b56ee Merge pull request #23 from SASPAC/dev
The BasePlus package [ver. 1.31.0]
2023-10-12 17:26:03 +02:00
Bart Jablonski
2e1d9df0c3 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.
2023-10-12 17:20:51 +02:00
13 changed files with 31069 additions and 75 deletions

View File

@@ -45,10 +45,14 @@ libname NEW "%workPath()/new";
%put %translate(%str("A", "B", "C"),%str(%",),%str(%' ));
%put %tranwrd(Miss Joan Smith,Miss,Ms.);
%put %date() %time() %datetime();
%put %monthShift(2023,1,-5);
```
and more.
SHA256 digest for the latest version of `BasePlus`: F*B91771D45C781B6806DBB44A3B491A0784D7698B9F3BBBE1A86EE5594834315F
SHA256 digest for the latest version of `BasePlus`: F*62344EAA8C0DD95CCB164B5C7A91B33865B3D19CD5A2A3EDAC4C31E0541D04C9
[**Documentation for BasePlus**](./baseplus.md "Documentation for BasePlus")

View File

@@ -45,6 +45,9 @@
* [`%RainCloudPlot()` macro](#raincloudplot-macro)
* [`%zipLibrary()` macro](#ziplibrary-macro)
* [`%unzipLibrary()` macro](#unziplibrary-macro)
* [`%zipArch()` macro](#ziparch-macro)
* [`%unzipArch()` macro](#unziparch-macro)
* [`%downloadFilesTo()` macro](#downloadfilesto-macro)
* [`%LDSN()` macro](#ldsn-macro)
* [`%LDsNm()` macro](#ldsnm-macro)
* [`%LVarNm()` macro](#lvarnm-macro)
@@ -60,6 +63,11 @@
* [`%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)
* [`%monthShift()` macro](#monthshift-macro)
* [`%translate()` macro](#translate-macro)
* [`%tranwrd()` macro](#tranwrd-macro)
* [`%findDSwithVarVal()` macro](#finddswithvarval-macro)
@@ -73,7 +81,7 @@
---
# The BasePlus package [ver. 1.30.0] <a name="baseplus-package"></a> ###############################################
# The BasePlus package [ver. 1.35.0] <a name="baseplus-package"></a> ###############################################
The **BasePlus** package implements useful
functions and functionalities I miss in the BASE SAS.
@@ -81,6 +89,7 @@ functions and functionalities I miss in the BASE SAS.
It is inspired by various people, e.g.
- at the SAS-L discussion list
- at the communities.sas.com (SASware Ballot Ideas)
- at StackOverflow
- at the Office...
- etc.
@@ -94,9 +103,8 @@ Kudos to all who inspired me to generate this package:
*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).
*Leonid Batkhan*,
*Louise Hadden*.
---
@@ -334,80 +342,155 @@ 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();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 24** Months shifting:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%put
Past: %monthShift(2023, 1, -1)
Current: %monthShift(2023, 1 )
Future: %monthShift(2023, 1, +1)
;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 25** Zipping and unzipping directories:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
options dlCreateDir;
libname arch1 "%workPath()/testArch1";
libname arch2 "%workPath()/testArch2";
filename arch1 "%workPath()/testArch1";
data _null_;
file arch1(test1.txt);
put "text for test file 1";
data _null_;
file arch1(test2.txt);
put "text for test file 2";
data _null_;
file arch1(test3.txt);
put "text for test file 3";
run;
data arch1.class(index=(name));
set sashelp.class;
run;
data arch1.cars(index=(model));
set sashelp.cars;
run;
%zipArch(
archName2.zip
, pathRef = arch1
, target = %workPath()/testArch2
, list = 1
, overwrite = 1
)
%unzipArch(
archName2.zip
, path = %workPath()/testArch2
, target = %workPath()/testArch2
, clean=1
, list=1
);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 26** Downloading data from the internet to a local dirrectory:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%downloadFilesTo(~/directoryA)
datalines4;
https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-189.pdf
https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-189.zip
;;;;
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
Package contains:
1. macro bppipe
2. macro deduplistc
3. macro deduplistp
4. macro deduplists
5. macro deduplistx
6. macro dirsandfiles
7. macro functionexists
8. macro getvars
9. macro intslist
10. macro ldsn
11. macro ldsnm
12. macro lvarnm
13. macro lvarnmlab
14. macro qdeduplistx
15. macro qgetvars
16. macro qzipevalf
17. macro raincloudplot
18. macro repeattxt
19. macro splitdsintoblocks
20. macro splitdsintoparts
21. macro symdelglobal
22. macro 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 unziparch
23. macro unziplibrary
24. macro ziparch
25. macro zipevalf
26. macro ziplibrary
27. format bool
28. format boolz
29. format ceil
30. format floor
31. format int
32. functions arrfill
33. functions arrfillc
34. functions arrmissfill
35. functions arrmissfillc
36. functions arrmisstoleft
37. functions arrmisstoleftc
38. functions arrmisstoright
39. functions arrmisstorightc
40. functions bracketsc
41. functions bracketsn
42. functions catxfc
43. functions catxfi
44. functions catxfj
45. functions catxfn
46. functions deldataset
47. functions semicolonc
48. functions semicolonn
49. format brackets
50. format semicolon
51. proto qsortincbyprocproto
52. functions frommissingtonumberbs
53. functions fromnumbertomissing
54. functions quicksort4notmiss
55. functions quicksorthash
56. functions quicksorthashsddv
57. functions quicksortlight
58. macro date
59. macro datetime
60. macro downloadfilesto
61. macro filepath
62. macro finddswithvarval
63. macro fmt
64. macro gettitle
65. macro infmt
66. macro letters
67. macro libpath
68. macro minclude
69. macro monthshift
70. macro replist
71. macro time
72. macro today
73. macro translate
74. macro tranwrd
75. macro workpath
@@ -415,10 +498,10 @@ Package contains additional content, run: %loadPackageAddCnt(BasePlus) to load
or look for the baseplus_AdditionalContent directory in the Packages fileref
localization (only if additional content was deployed during the installation process).
* SAS package generated by generatePackage, version 20230905 *
* SAS package generated by generatePackage, version 20231107 *
The SHA256 hash digest for package BasePlus:
`F*B91771D45C781B6806DBB44A3B491A0784D7698B9F3BBBE1A86EE5594834315F`
`F*62344EAA8C0DD95CCB164B5C7A91B33865B3D19CD5A2A3EDAC4C31E0541D04C9`
---
# Content description ############################################################################################
@@ -3750,6 +3833,356 @@ run;
---
## >>> `%zipArch()` macro: <<< <a name="ziparch-macro"></a> #######################
The zipArch() macro allows to ZIP content of a directory.
Macro is OS independent, the `XCMD` option is not required.
Content of zipped archive can be listed in the log.
Errors of decompression and are reported.
Macro **does not** include hidden files.
See examples below for the details.
### SYNTAX: ###################################################################
The basic syntax is the following, the `<...>` means optional parameters:
~~~~~~~~~~~~~~~~~~~~~~~sas
%zipArch(
archName
,path =
<,pathRef=>
<,target=>
<,targetRef=>
<,list=>
<,overwrite=>
<,dropList=>
)
~~~~~~~~~~~~~~~~~~~~~~~
**Arguments description**:
1. `archName` - *Required*, name of the archive to be generated.
Name should be full, i.e., with the extension!
2. `path=` - *Required/Optional*, location of a directory to ZIP.
The path should be provided unquoted.
Has priority over the `pathRef` parameter.
* `pathRef=` - *Required/Optional*, fileref to location of a directory to ZIP.
The reference **has** to be pointing to single directory.
If provided with `path` - the `path` takes
priority over the `pathRef` parameter.
* `target=` - *Optional*, a path pointing to target location where
the archive will be generated.
The path should be provided unquoted.
Default value is `WORK` location.
Has priority over the `targetRef` parameter.
* `targetRef=` - *Optional*, fileref to a path pointing to target location
where the archive will be generated.
The reference **has** to be pointing to single directory.
If provided with `target` - the `target` takes
priority over the `targetRef` parameter.
* `list = 0` - *Optional*, default value is `0`,
indicates if zip content should be listed in the log.
`1` means *yes*, `0` means *no*.
* `overwrite = 0` - *Optional*, default value is `0`,
indicates if existing archive file should be overwritten.
`1` means *yes*, `0` means *no*.
* `overwrite = 1` - *Technical*, default value is `1`,
indicates if the "to-be-zipped-files-list"
data set should be deleted.
`1` means *yes*, `0` means *no*.
---
### EXAMPLES AND USECASES: ####################################################
**EXAMPLE 1.** Zip a directory . Example requires the `basePlus` package.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
options dlCreateDir;
libname arch1 "%workPath()/testArch1";
libname arch2 "%workPath()/testArch2";
filename arch1 "%workPath()/testArch1";
data _null_;
file arch1(test1.txt);
put "text for test file 1";
data _null_;
file arch1(test2.txt);
put "text for test file 2";
data _null_;
file arch1(test3.txt);
put "text for test file 3";
run;
data arch1.class(index=(name));
set sashelp.class;
run;
data arch1.cars(index=(model));
set sashelp.cars;
run;
%zipArch(
archName1.zip
, path = %workPath()/testArch1
, list = 1
, overwrite = 1
)
%zipArch(
archName2.zip
, pathRef = arch1
, target = %workPath()/testArch2
, list = 1
, overwrite = 1
)
%unzipArch(
archName2.zip
, path = %workPath()/testArch2
, target = %workPath()/testArch2
, clean=1
, list=1
);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
## >>> `%unzipArch()` macro: <<< <a name="unziparch-macro"></a> #######################
The unzipArch() macro allows to unzip content of a ZIP archive.
Macro is OS independent, the `XCMD` option is not required.
The `dlCreateDir` option is used under the hood.
Content of unzipped archive can be listed in the log.
Source files can be deleted after decompression.
Errors of decompression and are reported. If any occur
the deletion is suspended.
See examples below for the details.
### SYNTAX: ###################################################################
The basic syntax is the following, the `<...>` means optional parameters:
~~~~~~~~~~~~~~~~~~~~~~~sas
%unzipArch(
archName
<,path=>
<,pathRef=>
<,target=>
<,targetRef=>
<,list=>
<,clean=>
)
~~~~~~~~~~~~~~~~~~~~~~~
**Arguments description**:
1. `archName` - *Required*, name of the ZIP archive to be extracted.
Name should be full, i.e., with the extension!
* `path=` - *Optional*, a path pointing to zipped file location.
The path should be provided unquoted.
Default value is `WORK` location.
* `pathRef=` - *Optional*, a fileref to path pointing to zipped file location.
The `path`, if not null, has precedense over the `pathRef`.
* `target=` - *Optional*, a path pointing to target location where
files will be extracted.
The path should be provided unquoted.
Default value is `WORK` location.
* `target=` - *Optional*, a fileref to path pointing to target location where
files will be extracted.
The `target`, if not null, has precedense over the `targetRef`.
* `list = 0` - *Optional*, default value is `0`,
indicates if zip content should be listed in the log.
`1` means *yes*, `0` means *no*.
* `clean = 0` - *Optional*, default value is `0`,
indicates if zip file should be deleted after unzipping.
`1` means *yes*, `0` means *no*.
---
### EXAMPLES AND USECASES: ####################################################
**EXAMPLE 1.** Unzip compressed archive. Example requires the `basePlus` package.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
filename arch ZIP "%workPath()/testArch.zip";
data _null_;
file arch(abc/test1.txt);
put "text for test file 1";
data _null_;
file arch(abc/subdir/test2.txt);
put "text for test file 2";
data _null_;
file arch(abc/subdir/test3.txt);
put "text for test file 3";
run;
%unzipArch(
testArch.zip
, path = %workPath()
, target = %workPath()
, list=1
);
filename pR "%workPath()";
%unzipArch(
testArch.zip
, pathRef = pR
, targetRef = pR
, clean=1
);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
## >>> `%downloadFilesTo()` macro: <<< <a name="downloadfilesto-macro"></a> #######################
The downloadFilesTo() macro copy files (in binary mode
using `filename()` function with options `lrecl=1 recfm=n`)
from list provided by user to a directory indicated
in the macro call.
Macro can be executed in two possible ways:
1) by providing list of files to download in a `datalines4`(`cards4`) list
directly after macro call:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%downloadFilesTo(</path/to/target/directory>)
datalines4;
<link to file1>
<link to file2>
...
<link to fileN>
;;;;
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2) by create a dataset with a list of links and use of `DS=` and `DSvar=` parameters.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%downloadFilesTo(</path/to/target/directory>
, DS=<dataset with list>
, DSvar=<variable with list>
)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
See examples below for the details.
The `%downloadFilesTo()` macro **does not** execute as a pure macro code.
Temporary dataset `work.______locationInfoData` is generated during processing.
### SYNTAX: ###################################################################
The basic syntax is the following, the `<...>` means optional parameters:
~~~~~~~~~~~~~~~~~~~~~~~sas
%downloadFilesTo(
target
<,DS=>
<,DSvar=link>
<,inDev=URL>
<,outDev=DISK>
<,inOptions=>
<,outOptions=>
)
~~~~~~~~~~~~~~~~~~~~~~~
**Arguments description**:
1. `target ` - *Required*, a path to target directory.
If empty the `WORK` location is used.
*. `DS= ` - *Optional*, name of data set with list
of files to download.
*. `DSvar= ` - *Optional*, name of variable in data set
with list of files to download.
*. `inDev=` - *Optional*, type of device used by the
`filename()` function to access incoming files.
Default value is `URL`.
*. `outDev=` - *Optional*, type of device used by the
`filename()` function to access outgoing files.
Default value is `DISK`.
*. `inOptions=` - *Optional*, list of additional options for the
`filename()` function to access incoming files.
Default value is empty.
*. `outOptions=` - *Optional*, list of additional options for the
`filename()` function to access outgoing files.
Default value is empty.
---
### EXAMPLES AND USECASES: ####################################################
**EXAMPLE 1.** Download data from web with diect list and then copy between directories:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
resetline;
%downloadFilesTo(~/directoryA)
datalines4;
https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-189.pdf
https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-189.zip
;;;;
run;
%downloadFilesTo(~/directoryB,inDev=DISK)
datalines4;
~/directoryA/WUSS-2023-Paper-189.pdf
~/directoryA/WUSS-2023-Paper-189.zip
;;;;
run;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 2.** Download data from web using data set with list:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
resetline;
data listOfFiles;
infile cards;
input files :$1024.;
cards4;
https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-201.pdf
https://www.lexjansen.com/wuss/2023/WUSS-2023-Paper-109.pdf
;;;;
run;
%downloadFilesTo(R:\directoryC, DS=listOfFiles, DSvar=files)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
## >>> `%LDSN()` macro: <<< <a name="ldsn-macro"></a> #######################
The LDSN (Long DataSet Names) macro function
@@ -4970,6 +5403,277 @@ The basic syntax is the following, the `<...>` means optional parameters:
---
## >>> `%date()` macro: <<< <a name="date-macro"></a> #######################
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: <<< <a name="today-macro"></a> #######################
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: <<< <a name="time-macro"></a> #######################
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: <<< <a name="datetime-macro"></a> #######################
The datetime() macro function is a "lazy typer" wrapping up `%sysfunc(datetime())`.
See examples below for the details.
The `%datetime()` macro executes like a pure macro code.
### SYNTAX: ###################################################################
The basic syntax is the following, the `<...>` means optional parameters:
~~~~~~~~~~~~~~~~~~~~~~~sas
%datetime()
~~~~~~~~~~~~~~~~~~~~~~~
**Arguments description**:
No arguments.
---
### EXAMPLES AND USECASES: ####################################################
**EXAMPLE 1.** Get value of `datetime()`:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%put %datetime();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
## >>> `%monthShift()` macro: <<< <a name="monthshift-macro"></a> #######################
The monthShift() macro is a utility macro
which allows to shift "year-month" period by
a given number of "periods" (months).
The result is in the `YYYYMM` format but can be altered.
See examples below for the details.
The `%monthShift()` macro executes like a pure macro code.
### SYNTAX: ###################################################################
The basic syntax is the following, the `<...>` means optional parameters:
~~~~~~~~~~~~~~~~~~~~~~~sas
%monthShift(
< Y>
<,M>
<,shift>
<,ofmt=>
)
~~~~~~~~~~~~~~~~~~~~~~~
**Arguments description**:
1. `Y` - *Optional*, a year from which counting starts.
If null the value is set to *system year*.
2. `M` - *Optional*, a month from which counting starts.
If null the value is set to `1`. Can be a number
(`1` to `12`) or a name (`June`, `OCTOBER`) or
a three letters short (`JAN`, `apr`).
3. `shift` - *Optional*, number of periods to shift.
If null the value is set to `0`.
Positive value shifts to the "future",
negative value shifts to the "past",
Can be an expression (e.g. `1+2*3`, see examples).
* `ofmt=YYMMn6.` - *Optional*, it is a format name used to
display the result. Default value is `YYMMn6.`
See examples.
---
### EXAMPLES AND USECASES: ####################################################
**EXAMPLE 1.** Shift one up and one down:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%put
Past: %monthShift(2023, 1, -1)
Current: %monthShift(2023, 1 )
Future: %monthShift(2023, 1, +1)
;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 2.** Shift by expression:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%let n = 2;
%put
%monthShift(2023, 1, +1 + &n.*3)
;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 3.** Shift with default values:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%put %monthShift();
%put %monthShift(2023);
%put %monthShift(2023,Jan);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 4.** Shift with months names:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%put
%monthShift(2023,Jan,-1)
%monthShift(2023,Feb,-2)
%monthShift(2023,Mar,-3)
%monthShift(2023,Apr,-4)
%monthShift(2023,May,-5)
%monthShift(2023,Jun,-6)
%monthShift(2023,Jul,-7)
%monthShift(2023,Aug,-8)
%monthShift(2023,Sep,-9)
%monthShift(2023,Oct,-10)
%monthShift(2023,Nov,-11)
%monthShift(2023,Dec,-12)
;
%put
%monthShift(2023,January,12)
%monthShift(2023,February,11)
%monthShift(2023,March,10)
%monthShift(2023,April,9)
%monthShift(2023,May,8)
%monthShift(2023,June,7)
%monthShift(2023,July,6)
%monthShift(2023,August,5)
%monthShift(2023,September,4)
%monthShift(2023,October,3)
%monthShift(2023,November,2)
%monthShift(2023,December,1)
;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 5.** Play with formatting:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
%put
%monthShift(2023, 1, +1 )
%monthShift(2023, 1, +1, ofmt=yymm7. )
%monthShift(2023, 1, +1, ofmt=yymmd7.)
%monthShift(2023, 1, +1, ofmt=yymms7.)
;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**EXAMPLE 6.** Read monthly data with `noDSNFERR` option:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
data
A202210 A202211 A202212
A202301 A202302 A202303
A202304 A202305 A202306
A202307 A202308 A202309
;
set sashelp.class;
run;
options noDSNFERR;
data ALL;
set
A%monthShift(2023, 9, -12) - A%monthShift(2023, 9)
;
run;
options DSNFERR;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
## >>> `%translate()` macro: <<< <a name="translate-macro"></a> #######################
The translate() macro function allows to replace bytes with bytes in text string.

Binary file not shown.

5778
hist/1.31.0/baseplus.md Normal file

File diff suppressed because it is too large Load Diff

BIN
hist/1.31.0/baseplus.zip Normal file

Binary file not shown.

5932
hist/1.32.0/baseplus.md Normal file

File diff suppressed because it is too large Load Diff

BIN
hist/1.32.0/baseplus.zip Normal file

Binary file not shown.

6020
hist/1.33.0/baseplus.md Normal file

File diff suppressed because it is too large Load Diff

BIN
hist/1.33.0/baseplus.zip Normal file

Binary file not shown.

6212
hist/1.34.0/baseplus.md Normal file

File diff suppressed because it is too large Load Diff

BIN
hist/1.34.0/baseplus.zip Normal file

Binary file not shown.

6344
hist/1.35.0/baseplus.md Normal file

File diff suppressed because it is too large Load Diff

BIN
hist/1.35.0/baseplus.zip Normal file

Binary file not shown.