[prev in list] [next in list] [prev in thread] [next in thread]
List: sas-l
Subject: Re: tip concise CONTENTS via SQL macro
From: "Fehd, Ronald J. (PHPPO)" <rjf2 () CDC ! GOV>
Date: 2003-06-30 20:13:58
[Download RAW message or body]
As a result of thinking over just how much (virtual)
ink I use when doing
PROC CONTENTS data = WORK._ALL_;
I have reduced the output with my List Processing w/SQL ideas:
see macro below .sig
as always commentary invited and welcomed
note %local allocation with macro functions in parameter list
TGIHW: Thank Goodness it's a Holiday Week!
Ron Fehd the List Processing w/SQL maven CDC Atlanta GA USA RJF2@cdc.gov
Maximum fun! -- Linus Torvalds, creator of Linux
Minimum ink usage! -- RJF2, creator of SQL tools
/*CONTENTS: return short contents via SQL
usage:
%CONTENTS(DATA = WORK._ALL_ nods);
%CONTENTS(DATA = WORK._ALL_ );
%CONTENTS(DATA = WORK.A );
*** ............................. ......... */
%MACRO CONTENTS
(DATA = WORK._ALL_ NODS
/*local*/
,LIBNAME = %scan(&DATA.,1,.)
,MEMNAME = %scan(&DATA.,2,%str(. ))
,NODS = %scan(&DATA.,2,%str( ))
,TESTING = 0
,TITLEN = 2
)/ des = "SQL CONTENTS short form &SYSDATE. &SYSUSERID."
/*SASMACRO.cat.description*/
;/* change notes -----------
RJF2 03Jun30 written
*** ........ */
%*upcase for use in conditions,
UPCASE did not work in parm list;
%LET LIBNAME = %UPCASE(&LIBNAME.);
%LET MEMNAME = %UPCASE(&MEMNAME.);
%LET NODS = %UPCASE(&NODS. );
%IF &TESTING. %THEN %DO;
%PUT DATA = <&DATA.>;
%PUT LIBNAME = <&LIBNAME.>;
%PUT MEMNAME = <&MEMNAME.>;
%PUT NODS = <&NODS.>;
%*GOTO EXIT;%END;
TITLE&TITLEN. "CONTENTS: &LIBNAME..&MEMNAME. &NODS. via SQL";
%IF "&MEMNAME." eq "_ALL_"
and "&NODS." eq "NODS" %THEN %DO;
PROC SQL; create table ZQTABLES
as select LibName ,MemName ,Nobs ,Nvar ,MemLabel
from DICTIONARY.TABLES
where LibName eq "&LIBNAME."
;quit;
PROC PRINT data = ZQTABLES;
by LibName;
id LibName;
proc DATASETS library = WORK
memtype = data
nolist;
delete ZQTABLES;
quit;
%GOTO EXIT;%END;
%*............................ %IF MEMNAME EQ _ALL_ and NODS;%END;
PROC SQL; create table ZQCOLUMNS
as select LibName ,MemName ,Name ,Type ,Length ,Label
from DICTIONARY.COLUMNS
where LibName eq "&LIBNAME."
%IF "&MEMNAME." ne "_ALL_" %THEN %DO;
and MemName eq "&MEMNAME." %END;
;quit;
PROC PRINT data = ZQCOLUMNS;
by LibName MemName ;
id LibName MemName;
proc DATASETS library = WORK
memtype = data
nolist;
delete ZQCOLUMNS;
quit;
%EXIT: run;%* ....................... ......... *;%MEND;
/* test section ----------------------------------- **
%MACRO MAKEDATA(DATA,N);DATA &DATA.(label="&DATA.");
do i = 1 to &N.;output;end;stop;%mend;
%MAKEDATA(A,1);
%MAKEDATA(B,2);
%MAKEDATA(C,3);
%CONTENTS(DATA = WORK._ALL_ nods);
%CONTENTS(DATA = WORK._ALL_ );
%CONTENTS(DATA = WORK.A );
/*** ************************************************ */
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic