diff --git a/SQLinDS/001_macro/dssql_inner.sas b/SQLinDS/001_macro/dssql_inner.sas index 31c78f8..a992051 100644 --- a/SQLinDS/001_macro/dssql_inner.sas +++ b/SQLinDS/001_macro/dssql_inner.sas @@ -17,15 +17,45 @@ /*** HELP END ***/ /* inner macro */ -%MACRO dsSQL_Inner() / SECURE; - %local query; +%MACRO dsSQL_Inner() / secure; + %local query tempfile1 tempfile2; %let query = %superq(query_arg); %let query = %sysfunc(dequote(&query)); %let viewname = dsSQL.dsSQLtmpview&UNIQUE_INDEX_2.; - proc sql; - create view &viewname as - &query + + %let tempfile1 = A%sysfunc(datetime(), hex7.); + %let tempfile2 = B%sysfunc(datetime(), hex7.); + + filename &tempfile1. temp; + filename &tempfile2. temp; + proc printto log = &tempfile1.; + run; + /* get the query shape i.e. the executed one */ + proc sql feedback noexec; + &query ; quit; + proc printto; + run; + + %put *** executed as ***; + data _null_; + infile &tempfile1. FIRSTOBS = 2; /* <- 2 to ignore header */ + file &tempfile2.; + /* create the view name */ + if _N_ = 1 then + put " create view &viewname. as "; + input; + put _infile_; + putlog ">" _infile_; + run; + %put *****************; + + proc sql; + %include &tempfile2.; /* &query */ + ; + quit; + filename &tempfile1. clear; + filename &tempfile2. clear; %MEND dsSQL_Inner; diff --git a/SQLinDS/999_test/test1.sas b/SQLinDS/999_test/test1.sas new file mode 100644 index 0000000..8cde321 --- /dev/null +++ b/SQLinDS/999_test/test1.sas @@ -0,0 +1,10 @@ +proc sort data=sashelp.class out=test1; + by age name; +run; + +data class; + set %SQL(select * from sashelp.class order by age, name); +run; + +proc compare base = test1 compare = class; +run; diff --git a/SQLinDS/999_test/test2.sas b/SQLinDS/999_test/test2.sas new file mode 100644 index 0000000..d016da2 --- /dev/null +++ b/SQLinDS/999_test/test2.sas @@ -0,0 +1,29 @@ +data class_work; + set sashelp.class; +run; + +data test_work; + set %sql(select * from class_work); +run; + +options dlcreatedir; +libname user "%sysfunc(pathname(work))/user"; +%put *%sysfunc(pathname(user))*; + +data cars_user cars_user2; + set sashelp.cars; +run; + +data test_user; + set %sql(select * from cars_user); +run; + +data test_user2; + set %sql(select * from user.cars_user2); +run; + +libname user clear; +%put *%sysfunc(pathname(user))*; + +proc datasets lib = work; +run; diff --git a/SQLinDS/description.sas b/SQLinDS/description.sas index c30b1c2..3f33618 100644 --- a/SQLinDS/description.sas +++ b/SQLinDS/description.sas @@ -6,7 +6,7 @@ Type: Package :/*required, not null, constant value*/ Package: SQLinDS :/*required, not null, up to 24 characters, naming restrictions like for a dataset name! */ Title: SQL queries in Data Step :/*required, not null*/ -Version: 1.0 :/*required, not null*/ +Version: 2.0 :/*required, not null*/ Author: Mike Rhoads (RhoadsM1@Westat.com) :/*required, not null*/ Maintainer: Bartosz Jablonski (yabwon@gmail.com) :/*required, not null*/ License: MIT :/*required, not null, values: MIT, GPL2, BSD, etc.*/ diff --git a/sqlinds.zip b/sqlinds.zip index b7f5631..3cc3362 100644 Binary files a/sqlinds.zip and b/sqlinds.zip differ