diff --git a/SPF/Documentation/Paper_1079-2021/My First SAS Package - a How To.pdf b/SPF/Documentation/Paper_1079-2021/My First SAS Package - a How To.pdf new file mode 100644 index 0000000..0545475 Binary files /dev/null and b/SPF/Documentation/Paper_1079-2021/My First SAS Package - a How To.pdf differ diff --git a/SPF/Documentation/Paper_1079-2021/Paper_1079-2021.sas b/SPF/Documentation/Paper_1079-2021/Paper_1079-2021.sas new file mode 100644 index 0000000..c066fea --- /dev/null +++ b/SPF/Documentation/Paper_1079-2021/Paper_1079-2021.sas @@ -0,0 +1,80 @@ +/*one library "myLib" created in the (same named) subderectory of the "WORK" directory.*/ +data _null_; + length rc0 $ 32767 rc1 rc2 8; + lib = "myLib"; + rc0 = DCREATE(lib, "%sysfunc(pathname(work))/"); + put rc0 = ; + rc1 = LIBNAME(lib, "%sysfunc(pathname(work))/" !! lib, "BASE"); + rc2 = LIBREF (lib); + if rc2 NE 0 then + rc1 = LIBNAME(lib, "%sysfunc(pathname(work))", "BASE"); +run; + +libname myLib LIST; + +/*two FCMP functions: "F1" and "F2", */ +proc FCMP outlib = work.f.p; + function F1(n); + return (n+1); + endsub; + + function F2(n); + return (n+2); + endsub; +run; +options cmplib = work.f; + +/*one numeric format "fmtNum" and informat "infNum", */ +proc FORMAT; + value fmtNum + low -< 0 = "negative" + 0 = "zero" + 0 <- high = "positive" + other = "missing" + ; + invalue infNum + "negative" = -1 + "zero" = 0 + "positive" = 1 + "missing" = . + other = 42 + ; +run; + +/*one exemplary small dataset "myLib.smallDataset", and*/ +data myLib.smallDataset; + do n = ., -1, 0, 1; + m = put(n, fmtNum.); + output; + end; +run; + +/*one exemplary bigger dataset "myLib.biggerDataset".*/ +data myLib.biggerDataset; + do i = ., -1e6 to 1e6; + j = put(i, fmtNum.); + k = ranuni(17); + output; + end; +run; + +/*two macros: "mcrOne" and "mcrTwo" */ +%macro mcrOne(); + %put **Hi! This is macro &sysmacroname.**; + data _null_; + set myLib.smallDataset; + p = f1(n); + p + f2(n); + put (n p) (= fmtNum.); + run; +%mend mcrOne; + +%macro mcrTwo(m=mcrOne); + %put **This is macro &sysmacroname.**; + %put **and I am calling the &m.**; + %&m.() + + %put The answer is: %sysfunc(inputn("I don't know...", infNum.)); +%mend mcrTwo; + +/* %mcrTwo() */ diff --git a/SPF/Documentation/Paper_1079-2021/generate_package.sas b/SPF/Documentation/Paper_1079-2021/generate_package.sas new file mode 100644 index 0000000..eac4913 --- /dev/null +++ b/SPF/Documentation/Paper_1079-2021/generate_package.sas @@ -0,0 +1,4 @@ +filename packages "~/saspackages"; +%include packages(SPFinit.sas); + +%generatePackage(~/saspackages/myPackage) diff --git a/SPF/Documentation/Paper_1079-2021/getTheSASPackagesFramework.sas b/SPF/Documentation/Paper_1079-2021/getTheSASPackagesFramework.sas new file mode 100644 index 0000000..3509410 --- /dev/null +++ b/SPF/Documentation/Paper_1079-2021/getTheSASPackagesFramework.sas @@ -0,0 +1,7 @@ +filename packages "~/saspackages"; + +filename SPFinit url + "https://raw.githubusercontent.com/yabwon/SAS_PACKAGES/main/SPF/SPFinit.sas"; +%include SPFinit; + +%installPackage(SPFinit) diff --git a/SPF/Documentation/Paper_1079-2021/myPackage/001_libname/mylib.sas b/SPF/Documentation/Paper_1079-2021/myPackage/001_libname/mylib.sas new file mode 100644 index 0000000..f227ae3 --- /dev/null +++ b/SPF/Documentation/Paper_1079-2021/myPackage/001_libname/mylib.sas @@ -0,0 +1,18 @@ +/*** HELP START ***/ +/* +`myLib` library +*/ +/*** HELP END ***/ + +data _null_; + length rc0 $ 32767 rc1 rc2 8; + lib = "myLib"; + rc0 = DCREATE(lib, "%sysfunc(pathname(work))/"); + put rc0 = ; + rc1 = LIBNAME(lib, "%sysfunc(pathname(work))/" !! lib, "BASE"); + rc2 = LIBREF (lib); + if rc2 NE 0 then + rc1 = LIBNAME(lib, "%sysfunc(pathname(work))", "BASE"); +run; + +libname myLib LIST; diff --git a/SPF/Documentation/Paper_1079-2021/myPackage/002_functions/f1.sas b/SPF/Documentation/Paper_1079-2021/myPackage/002_functions/f1.sas new file mode 100644 index 0000000..3464cea --- /dev/null +++ b/SPF/Documentation/Paper_1079-2021/myPackage/002_functions/f1.sas @@ -0,0 +1,9 @@ +/*** HELP START ***/ +/* +`F1` function +*/ +/*** HELP END ***/ + +function F1(n); + return (n+1); +endsub; diff --git a/SPF/Documentation/Paper_1079-2021/myPackage/002_functions/f2.sas b/SPF/Documentation/Paper_1079-2021/myPackage/002_functions/f2.sas new file mode 100644 index 0000000..c40a738 --- /dev/null +++ b/SPF/Documentation/Paper_1079-2021/myPackage/002_functions/f2.sas @@ -0,0 +1,9 @@ +/*** HELP START ***/ +/* +`F2` function +*/ +/*** HELP END ***/ + +function F2(n); + return (n+2); +endsub; diff --git a/SPF/Documentation/Paper_1079-2021/myPackage/003_formats/fmtnum.sas b/SPF/Documentation/Paper_1079-2021/myPackage/003_formats/fmtnum.sas new file mode 100644 index 0000000..69e1fb6 --- /dev/null +++ b/SPF/Documentation/Paper_1079-2021/myPackage/003_formats/fmtnum.sas @@ -0,0 +1,12 @@ +/*** HELP START ***/ +/* +`fmtNum` format +*/ +/*** HELP END ***/ + +value fmtNum + low -< 0 = "negative" + 0 = "zero" + 0 <- high = "positive" + other = "missing" + ; diff --git a/SPF/Documentation/Paper_1079-2021/myPackage/003_formats/infnum.sas b/SPF/Documentation/Paper_1079-2021/myPackage/003_formats/infnum.sas new file mode 100644 index 0000000..e29e346 --- /dev/null +++ b/SPF/Documentation/Paper_1079-2021/myPackage/003_formats/infnum.sas @@ -0,0 +1,13 @@ +/*** HELP START ***/ +/* +`infNum` informat +*/ +/*** HELP END ***/ + +invalue infNum + "negative" = -1 + "zero" = 0 + "positive" = 1 + "missing" = . + other = 42 + ; diff --git a/SPF/Documentation/Paper_1079-2021/myPackage/004_data/mylib.smalldataset.sas b/SPF/Documentation/Paper_1079-2021/myPackage/004_data/mylib.smalldataset.sas new file mode 100644 index 0000000..981f82e --- /dev/null +++ b/SPF/Documentation/Paper_1079-2021/myPackage/004_data/mylib.smalldataset.sas @@ -0,0 +1,12 @@ +/*** HELP START ***/ +/* +`myLib.smallDataset` data +*/ +/*** HELP END ***/ + +data myLib.smallDataset; + do n = ., -1, 0, 1; + m = put(n, fmtNum.); + output; + end; +run; diff --git a/SPF/Documentation/Paper_1079-2021/myPackage/005_lazydata/mylib.biggerdataset.sas b/SPF/Documentation/Paper_1079-2021/myPackage/005_lazydata/mylib.biggerdataset.sas new file mode 100644 index 0000000..cba07e1 --- /dev/null +++ b/SPF/Documentation/Paper_1079-2021/myPackage/005_lazydata/mylib.biggerdataset.sas @@ -0,0 +1,13 @@ +/*** HELP START ***/ +/* +`myLib.biggerDataset` data +*/ +/*** HELP END ***/ + +data myLib.biggerDataset; + do i = ., -1e6 to 1e6; + j = put(i, fmtNum.); + k = ranuni(17); + output; + end; +run; diff --git a/SPF/Documentation/Paper_1079-2021/myPackage/006_macro/mcrone.sas b/SPF/Documentation/Paper_1079-2021/myPackage/006_macro/mcrone.sas new file mode 100644 index 0000000..65d46c6 --- /dev/null +++ b/SPF/Documentation/Paper_1079-2021/myPackage/006_macro/mcrone.sas @@ -0,0 +1,15 @@ +/*** HELP START ***/ +/* +`mcrOne` macro +*/ +/*** HELP END ***/ + +%macro mcrOne(); + %put **Hi! This is macro &sysmacroname.**; + data _null_; + set myLib.smallDataset; + p = f1(n); + p + f2(n); + put (n p) (= fmtNum.); + run; +%mend mcrOne; diff --git a/SPF/Documentation/Paper_1079-2021/myPackage/006_macro/mcrtwo.sas b/SPF/Documentation/Paper_1079-2021/myPackage/006_macro/mcrtwo.sas new file mode 100644 index 0000000..c219dc4 --- /dev/null +++ b/SPF/Documentation/Paper_1079-2021/myPackage/006_macro/mcrtwo.sas @@ -0,0 +1,30 @@ +/*** HELP START ***/ +/* +## General Info: ## + +The `%mcrTwo()` macro is the main macro of the package. + +It has one key-value parameter `m` with default value `mcrOne`. +*/ +/*** HELP END ***/ + +%macro mcrTwo(m=mcrOne); + %put **This is macro &sysmacroname.**; + %put **and I am calling the &m.**; + %&m.() + + %put The answer is: %sysfunc(inputn("I don't know...", infNum.)); +%mend mcrTwo; + +/*** HELP START ***/ +/* +## Examples: ## + +Example 1. Basic use-case: +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +%mcrTwo(m=mcrOne) + +~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ +/*** HELP END ***/ diff --git a/SPF/Documentation/Paper_1079-2021/myPackage/description.sas b/SPF/Documentation/Paper_1079-2021/myPackage/description.sas new file mode 100644 index 0000000..bff31da --- /dev/null +++ b/SPF/Documentation/Paper_1079-2021/myPackage/description.sas @@ -0,0 +1,21 @@ +Type: Package +Package: myPackage +Title: My first SAS package. +Version: 1.0 +Author: John Smith (john.smith@mail.com) +Maintainer: Jane Smith (jane.smith@mail.com) +License: MIT +Encoding: UTF8 + +Required: "Base SAS Software" + +DESCRIPTION START: +## The myPackage ## + +The `myPackage` is my first SAS package and +for sure it won't be the last package! +It was created during SAS Global Forum 2021 +virtual event. + +It helps me to share my code with other SAS users! +DESCRIPTION END: diff --git a/SPF/Documentation/Paper_1079-2021/myPackage/test/my test.sas b/SPF/Documentation/Paper_1079-2021/myPackage/test/my test.sas new file mode 100644 index 0000000..2aa6c18 --- /dev/null +++ b/SPF/Documentation/Paper_1079-2021/myPackage/test/my test.sas @@ -0,0 +1,2 @@ + +%mcrTwo(m=mcrOne) diff --git a/SPF/Documentation/Paper_1079-2021/mypackage.md b/SPF/Documentation/Paper_1079-2021/mypackage.md new file mode 100644 index 0000000..0d599a4 --- /dev/null +++ b/SPF/Documentation/Paper_1079-2021/mypackage.md @@ -0,0 +1,14 @@ +## General Info: ## + +The `%mcrTwo()` macro is the main macro of the package. + +It has one key-value parameter `m` with default value `mcrOne`. + +## Examples: ## + +Example 1. Basic use-case: +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +%mcrTwo(m=mcrOne) + +~~~~~~~~~~~~~~~~~~~~~~~~~~