mirror of
https://github.com/yabwon/SAS_PACKAGES.git
synced 2026-01-03 13:20:05 +00:00
57 lines
1.6 KiB
SAS
57 lines
1.6 KiB
SAS
/*** HELP START ***/
|
|
|
|
/* >>> %SQL() macro: <<<
|
|
*
|
|
* Main macro which allows to use
|
|
* SQL's queries in the data step.
|
|
* 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
|
|
*
|
|
* SYNTAX:
|
|
|
|
%sql(<nonempty sql querry code>)
|
|
|
|
* The sql querry code is limited to 32000 bytes.
|
|
*
|
|
* EXAMPLE 1: simple sql query
|
|
|
|
data class_subset;
|
|
set %SQL(select name, sex, height from sashelp.class where age > 12);
|
|
run;
|
|
|
|
* EXAMPLE 2: query with dataset options
|
|
|
|
data renamed;
|
|
set %SQL(select * from sashelp.class where sex = "F")(rename = (age=age2));
|
|
run;
|
|
|
|
* EXAMPLE 3: dictionaries in datastep
|
|
|
|
data dictionary;
|
|
set %SQL(select * from dictionary.macros);
|
|
run;
|
|
|
|
**/
|
|
|
|
/*** HELP END ***/
|
|
|
|
|
|
/* Main User macro */
|
|
%MACRO SQL() / PARMBUFF SECURE;
|
|
%let SYSPBUFF = %superq(SYSPBUFF); /* macroquoting */
|
|
%let SYSPBUFF = %substr(&SYSPBUFF, 2, %LENGTH(&SYSPBUFF) - 2); /* remove brackets */
|
|
%let SYSPBUFF = %superq(SYSPBUFF); /* macroquoting */
|
|
%let SYSPBUFF = %sysfunc(quote(&SYSPBUFF)); /* quotes */
|
|
%put NOTE:*** the query ***; /* print out the query in the log */
|
|
%put NOTE-&SYSPBUFF.;
|
|
%put NOTE-*****************;
|
|
|
|
%local UNIQUE_INDEX; /* internal variable, a unique index for views */
|
|
%let UNIQUE_INDEX = &SYSINDEX;
|
|
%sysfunc(dsSQL(&UNIQUE_INDEX, &SYSPBUFF)) /* <-- call dsSQL() function,
|
|
see the WORK.SQLinDSfcmp dataset */
|
|
%MEND SQL;
|