This commit is contained in:
yabwon
2019-10-28 20:03:38 +01:00
parent 39117ffb90
commit 48aad33e87
13 changed files with 31 additions and 27 deletions

View File

@@ -4,7 +4,7 @@
*
* Internal macro called by dsSQL() function.
*
* Recomnended for SAS 9.3 and higher.
* Recommended for SAS 9.3 and higher.
* Based on paper:
* "Use the Full Power of SAS in Your Function-Style Macros"
* by Mike Rhoads, Westat, Rockville, MD

View File

@@ -4,13 +4,13 @@
*
* Main macro which allows to use
* SQL's queries in the data step.
* Recomnended for SAS 9.3 and higher.
* Recommended for SAS 9.3 and higher.
* Based on paper:
* "Use the Full Power of SAS in Your Function-Style Macros"
* by Mike Rhoads, Westat, Rockville, MD
* https://support.sas.com/resources/papers/proceedings12/004-2012.pdf
*
* EXAMPLE 1: simple sql querry
* EXAMPLE 1: simple sql query
data class_subset;
set %SQL(select name, sex, height from sashelp.class where age > 12);
@@ -39,7 +39,7 @@
%let SYSPBUFF = %substr(&SYSPBUFF, 2, %LENGTH(&SYSPBUFF) - 2); /* remove brackets */
%let SYSPBUFF = %superq(SYSPBUFF); /* macroquoting */
%let SYSPBUFF = %sysfunc(quote(&SYSPBUFF)); /* quotes */
%put NOTE-***the querry***; /* print out the querry in the log */
%put NOTE-***the query***; /* print out the query in the log */
%put NOTE-&SYSPBUFF.;
%put NOTE-****************;

View File

@@ -4,7 +4,7 @@
*
* Internal function called by %SQL() macro.
*
* Recomnended for SAS 9.3 and higher.
* Recommended for SAS 9.3 and higher.
* Based on paper:
* "Use the Full Power of SAS in Your Function-Style Macros"
* by Mike Rhoads, Westat, Rockville, MD
@@ -20,7 +20,7 @@ proc fcmp
;
function dsSQL(unique_index_2, query $) $ 41;
length
query query_arg $ 32000 /* max querry length */
query query_arg $ 32000 /* max query length */
viewname $ 41
;
query_arg = dequote(query);

View File

@@ -1,5 +1,5 @@
/* This is the description file for the package. */
/* The collon (:) is a field separator and is restricted */
/* The colon (:) is a field separator and is restricted */
/* in lines of the header part. */
/* **HEADER** */

View File

@@ -8,7 +8,7 @@ ods html;
/*
* filename reference "packages" and "package" are keywords;
* the first one should be used to point folder with packages;
* the second is used internaly by macros;
* the second is used internally by macros;
filename packages "C:\SAS_PACKAGES";
%include packages(loadpackage.sas);

BIN
dfa.zip

Binary file not shown.

Binary file not shown.

View File

@@ -36,11 +36,11 @@
*/
/**#############################################################################**/
/* Macros to generte SAS packages */
/* Macros to generate SAS packages */
/* A SAS package is a zip file containing a group
of SAS codes (macros, functions, datasteps generating
data, etc.) wrapped up together and %INCLUDEed by
a single load.sas file (also embeaded inside the zip).
a single load.sas file (also embedded inside the zip).
*/
/*** HELP END ***/
@@ -92,7 +92,7 @@ filename &_LIC_. "&filesLocation./license.sas" lrecl = 256;
when(upcase(scan(_INFILE_, 1, ":")) = "REQUIRED") call symputX("packageRequired", scan(_INFILE_, 2, ":"),"L");
when(upcase(scan(_INFILE_, 1, ":")) = "REQPACKAGES") call symputX("packageReqPackages", scan(_INFILE_, 2, ":"),"L");
/* stop at the begining of description */
/* stop at the beginning of description */
when(upcase(scan(_INFILE_, 1, ":")) = "DESCRIPTION START") stop;
otherwise;
end;
@@ -125,7 +125,7 @@ filename &_LIC_. "&filesLocation./license.sas" lrecl = 256;
%do;
%put ERROR: Package name is more than 24 characters long.;
%put ERROR- The name is used for functions%str(%') dataset name;
%put ERROR- and for formats%str(%') catalog name (with sufix).;
%put ERROR- and for formats%str(%') cataloge name (with suffix).;
%put ERROR- The length is %sysfunc(lengthn(&packageName.)). Try something shorter.;
%abort;
%end;
@@ -139,7 +139,7 @@ filename &_LIC_. "&filesLocation./license.sas" lrecl = 256;
%do;
%put ERROR: Package name contains illegal symbols.;
%put ERROR- The name is used for functions%str(%') dataset name;
%put ERROR- and for formats%str(%') catalog name.;
%put ERROR- and for formats%str(%') cataloge name.;
%put ERROR- Only English letters, underscore(_), and digits are allowed.;
%put ERROR- Try something else. Maybe: %qsysfunc(compress(&packageName.,,KDF)) will do?;
%abort;
@@ -181,7 +181,7 @@ filename &zipReferrence. ZIP "&filesLocation./%lowcase(&packageName.).zip";
*/
/*
Remember to prepare the description.sas file for you package.
The collon (:) is a field separator and is restricted
The colon (:) is a field separator and is restricted
in lines of the header part.
The file should contain the following obligatory information:
--------------------------------------------------------------------------------------------
@@ -210,7 +210,7 @@ DESCRIPTION END:
Name of the 'type' of folder and files.sas inside must be in _low_ case letters.
If order of loading is important, the 'sequential number'
can be used to order multiple types in the wey you wish.
can be used to order multiple types in the way you wish.
The "tree structure" of the folder could be for example as follows:
@@ -250,7 +250,7 @@ DESCRIPTION END:
| |
| +-<no file, in this case folder may be skipped>
|
+-006_format [if your codes depend eachother you can order them in folders,
+-006_format [if your codes depend each other you can order them in folders,
| | e.g. code from 003_... will be executed before 006_...]
| |
| +-abc.sas [a file with a code creating format ABC,
@@ -605,7 +605,7 @@ data _null_;
isFunction + (upcase(type)=:'FUNCTION');
isFormat + (upcase(type)=:'FORMAT');
/* add the link to the functions' dataset, only for the first occurence */
/* add the link to the functions' dataset, only for the first occurrence */
if 1 = isFunction and (upcase(type)=:'FUNCTION') then
do;
put "options APPEND=(cmplib = work.%lowcase(&packageName.fcmp));";
@@ -613,7 +613,7 @@ data _null_;
put '%put NOTE:[CMPLIB] %sysfunc(getoption(cmplib));' /;
end;
/* add the link to the formats' catalog, only for the first occurence */
/* add the link to the formats' catalog, only for the first occurrence */
if 1 = isFormat and (upcase(type)=:'FORMAT') then
do;
put "options INSERT=( fmtsearch = work.%lowcase(&packageName.format) );";
@@ -935,7 +935,7 @@ data _null_;
put ' set WORK._last_ end = EOFDS nobs = NOBS; ';
put ' length memberX $ 1024; ';
put ' memberX = cats("_",folder,".",file); ';
/* inner datastep in call execute to read each embedaded file */
/* inner datastep in call execute to read each embedded file */
put ' call execute("data _null_; ");';
put ' call execute("infile package(" || strip(memberX) || ") end = EOF; ");';
put ' call execute(" printer = 0; ");';
@@ -1028,6 +1028,10 @@ TODO:
- dodac typ "iml", "ds2", "proto"
-lista wymaganych komponentow potrzebnych do działania SASa (na bazie proc SETINIT) [v]
-sparwdzanie domknietosci, parzystosci i wystepowania tagow HELP START - HELP END w plikach [ ]
-weryfikacja nadpisywania makr [ ]
*/
/*

View File

@@ -2,7 +2,7 @@
/**############################################################################**/
/* */
/* Copyright Bartosz Jablonski, Jully 2019. */
/* Copyright Bartosz Jablonski, July 2019. */
/* */
/* Code is free and open source. If you want - you can use it. */
/* I tested it the best I could */
@@ -36,11 +36,11 @@
*/
/**#############################################################################**/
/* Macros to list SAS packages in packsges' folder */
/* Macros to list SAS packages in packages' folder */
/* A SAS package is a zip file containing a group
of SAS codes (macros, functions, datasteps generating
data, etc.) wrapped up together and %INCLUDEed by
a single load.sas file (also embeaded inside the zip).
a single load.sas file (also embedded inside the zip).
*/
/*
* Example 1:

View File

@@ -2,7 +2,7 @@
/**############################################################################**/
/* */
/* Copyright Bartosz Jablonski, Jully 2019. */
/* Copyright Bartosz Jablonski, July 2019. */
/* */
/* Code is free and open source. If you want - you can use it. */
/* I tested it the best I could */
@@ -40,11 +40,11 @@
/* A SAS package is a zip file containing a group
of SAS codes (macros, functions, datasteps generating
data, etc.) wrapped up together and %INCLUDEed by
a single load.sas file (also embeaded inside the zip).
a single load.sas file (also embedded inside the zip).
*/
/*
TODO:
- makro for testing avaliable packages in the packages' folder [DONE] checkuot: %listPackages()
- macro for testing available packages in the packages' folder [DONE] checkout: %listPackages()
*/
/*** HELP END ***/
@@ -198,12 +198,12 @@ TODO:
/*
* Filenames references "packages" and "package" are keywords;
* the first one should be used to point folder with packages;
* the second is used internaly by macros;
* the second is used internally by macros;
* Example 1:
* assuming that _THIS_FILE_ and the SQLinDS package (sqlinds.zip file)
* are located in the "C:/SAS_PACKAGES/" folder
* coppy the following code into autoexec.sas
* copy the following code into autoexec.sas
* or run it in your SAS session
**/
/*

Binary file not shown.

Binary file not shown.