Makro: Suche nach Variable (über Name oder Label) in "allen" SAS-Dateien
Der Macro %xref (xref wie "Cross-Referenz") sucht nach einer oder mehreren Variablen in SAS-Dateien oder kompletten Librarys. Die Suche kann eingeschränkt werden auf eine Datei (datei=) oder Library (lib=), wobei die Vorgabe „ab Wort-Anfang“ gilt. Die Treffer werden in ein SAS-Dataset geschrieben und mit proc print ausgegeben.
Beispiel:
%xref(var=labor, lib=dm3_g);
Output:
Quer-Verweis-Liste (Suche in 'sashelp.vcolumn') Selek-Bed: 'name LIKE "LABOR%" AND libname LIKE "DM3_G%"' Library Member Column Col. Col Name Name Name Type Len Column Label DM3_G A_KOPO_G LABOR char 3 PM-GRUPPE (VBAP-MARA-LABOR) DM3_G F_KOPO_G LABOR char 3 PM-GRUPPE (VBAP-MARA-LABOR) DM3_G L_KOPO_G LABOR char 3 PM-GRUPPE (VBAP-MARA-LABOR)
Weitere Muster-Aufrufe:
nur bestimmte Variable, egal wo (in allen Bibliotheken und Dateien)
%xref( var=KDVKV );
nur bestimmte Variablen, (hier: 'wkurH' und 'wkurB'), egal wo
%xref( var=wkur );
nur bestimmte Variablen
(hier: 'dwhwaehr' od. 'wkurH' bzw. 'wkurB'), egal wo
%xref( var1=dwhwaehr, var2=wkur );
alle Variablen, aus bestimmten Dateien
%xref( data=adr_neu );
nur bestimmte Variable, aus bestimmten Libraries
%xref( var=KDVKV, lib=library );
nur bestimmte Variable, aus bestimmten Dateien
%xref( var=KDVKV , data=kkr1998G ); %xref( var=kunnum , data=adr_neu1, lib=dw_read ); %xref( var=archidat, lib=d3 );
Variable(n), DataSet und LibName werden mit automatischem substr "ab Anfang" gesucht.
Die Suche über Label geht auf "Zeichenfolge irgendwo im LabelText".
Groß-/Kleinschreibung ist bei der Suche unwichtig/ egal.
Für die gleichzeitige Suche nach 2 Variablen müssen die Paramter var1 und var2 benutzt werden (oder-Verknüpfung).
Und die Macro-Definition (auch als Dateianhang):
var= /* Groß-/Kleinschr. egal, Suche "ab Wort-Anfang" */
, var1= /* Groß-/Kleinschr. egal, Suche "ab Wort-Anfang" - oder-verknüpft mit var2 */
, var2= /* Groß-/Kleinschr. egal, Suche "ab Wort-Anfang" - oder-verknüpft mit var1 */
, data= /* optional, Groß-/Kleinschr. egal, Suche "ab Wort-Anfang" */
, lib= /* optional, Groß-/Kleinschr. egal, Suche "ab Wort-Anfang" */
, label= /* Groß-/Kleinschr. egal, Suche "irgendwo im Text" */
);
/*------------------------------------------------------------------
* Quer-Verweis-Liste
* ==================
* über alle Dateien des DWH
*
* Ablauf:
* Datenselektion:
* in "sashelp.vcolumn",
* abh. von (optionalen) Selektions-Parameter(n)
* Sortierung nach "LIBNAME MEMNAME NAME"
*
* Ausgabe:
* SAS-Datei, Name "tmp_col"
*
* (Druck-)Ausgabe:
* - Library Name
* - Member Name
* - Column Name
* - Col. Type Feld-Typ (Text oder numerisch)
* - Col Len Feld-Länge (nur bei "Text" wichtig)
* - Column Label
* Muster-Aufrufe:
* ===============
*
* nur bestimmte Variable, egal wo
* %xref( var=KDVKV );
*
* nur bestimmte Variablen, (hier: 'wkurH' und 'wkurB'), egal wo
* %xref( var=wkur );
*
* nur bestimmte Variablen
* (hier: 'dwhwaehr' od. 'wkurH' bzw. 'wkurB'), egal wo
* %xref( var1=dwhwaehr, var2=wkur );
*
* alle Variablen, aus bestimmten Dateien
* %xref( data=adr_neu );
*
* nur bestimmte Variable, aus bestimmten Libraries
* %xref( var=KDVKV, lib=library );
*
* nur bestimmte Variable, aus bestimmten Dateien
* %xref( var=KDVKV, data=kkr1998G );
* %xref( data=adr_neu1, var=kunnum, lib=dw_read );
* %xref( lib =d3 , var=archidat);
*----------------------------------------------------------- */
%let _selbed=;
%let var =%upcase(&var.);
%let var1 =%upcase(&var1.);
%let var2 =%upcase(&var2.);
%let data =%upcase(&data.);
%let lib =%upcase(&lib.);
%let label=%upcase(&label.);
%if &var. ne %then %do;
%let _selbed=&_selbed. AND name LIKE "&var.%nrbquote(%)";
%end;
%if &var1. ne AND &var2. ne %then %do;
%let _selbed=&_selbed.
AND (name LIKE "&var1.%nrbquote(%)"
OR name LIKE "&var2.%nrbquote(%)"
);
%end;
%if &var1. ne AND &var2. eq %then %do;
%let _selbed=&_selbed. AND name LIKE "&var1.%nrbquote(%)";
%end;
%if &var1. eq AND &var2. ne %then %do;
%let _selbed=&_selbed. AND name LIKE "&var2.%nrbquote(%)";
%end;
%if &data. ne %then %do;
%let _selbed=&_selbed. AND memname LIKE "&data.%nrbquote(%)";
%end;
%if &lib. ne %then %do;
%let _selbed=&_selbed. AND libname LIKE "&lib.%nrbquote(%)";
%end;
%if &label. ne %then %do;
%let _selbed=&_selbed. AND label LIKE "%nrbquote(%)&label.%nrbquote(%)";
%end;
data vcolumn;
set sashelp.vcolumn;
name=upcase(name);
memname=upcase(memname);
libname=upcase(libname);
label=upcase(label);
run;
data tmp_SD1;
set vcolumn;
where 1=1 &_selbed.;
run;
proc sort data=tmp_SD1 out=tmp_col;
by LIBNAME MEMNAME NAME;
run;
title2 "Quer-Verweis-Liste (Suche in 'sashelp.vcolumn') ";
title3 "Selek-Bed: '%qsubstr(&_selbed.,5)' ";
options linesize=101;
proc print data=tmp_col noobs label;
var LIBNAME MEMNAME /* MEMTYPE */ NAME TYPE LENGTH LABEL;
label
TYPE ="Col. Type"
LENGTH="Col Len"
;
run;
%mend xref;
- Anmelden oder Registrieren um Kommentare zu schreiben
