%sysfunc

Aus SAS-Wiki
Wechseln zu: Navigation, Suche

%sysfunc ist eine Makrofunktion, die es ermöglicht, SAS-Funktionen aus dem Datenschritt sowie vom Nutzer erstellte Funktionen innerhalb der Makrosprache auch außerhalb des Datenschritts zu verwenden.

Syntax:

Die allgemeine Syntax ist:

%sysfunc(Funktion(Argument 1,...,Argument n),Format)

Funktion:

Man kann %sysfunc mit fast alle SAS-Funktionen benutzen, außer Variableninformationsfunktionen (zB. VNAME) und folgenden Funktionen:

alle Makrosfunktionen ALLCOMB ALLPERM DIF DIM HBOUND
IORCMSG INPUT LAG LBOUND LEXCOMB LEXCOMBI
LEXPERK LEXPERM MISSING PUT RESOLVE SYMGET

Statt PUT/INPUT kann man PUTN/INPUTN verwenden.

Es ist nicht möglich ein einzelnes %sysfunc auf verschachtelte Funktionen anzuwenden, aber es ist möglich %sysfunc Aufrufe zu verschachteln:

 %let x=%sysfunc((TRIM(%sysfunc(LEFT(&Beispiel))));

Argumente

Eingabewerte der Funktion dürfen keine Sonderzeichen oder Operatoren wie EQ enthalten.

Format

Optionales Ausgabeformat für die Funktion

Details

%sysfunc ist eine Makrosfunktion. Daher muss man Character-Werte nicht in Anführungszeichen setzen:

a=open("sashelp.baseball");
%let a=%sysfunc(open(sashelp.baseball));

Wenn die Funktionseingabewerte oder -Ausgabewerte folgende Zeichen bzw. Operatoren enthalten, kann man statt %sysfunc %qsysfunc anwenden.

& % ' " ( ) + - * / < > = ¬ ^ ~ ; , #  blank
AND OR NOT EQ NE LE LT GE GT IN

%qsysfunc hat die gleiche Syntax wie %sysfunc.

Beispiele

Beispiel 1

In dieser Title Anweisung wird das aktuelle Datum in dem angegebenen Format ddmmyy10. mit ausgegeben.

title "Beispiel vom %sysfunc(date(),ddmmyy10.)";
proc print data=sashelp.shoes;
run;
title;

Beipiel 2

Dieses Beispiel testet ob eine Zahl, kleiner, größer oder gleich Null ist.

proc format;
 value category
 Low-<0  = 'kleiner Null'
 0       = 'gleich Null'
 0<-high = 'größer Null'
 other   = 'Nichts';
run;

%macro teste(parameter);
 %put &parameter ist %sysfunc(putn(&parameter,category.));
%mend;

Wendet man nun die Funktion %teste() an:

%teste(1);
%teste(0);
%teste(.);

erhält man folgenden Output:

%teste(1);
1 ist größer Null
%teste(0);
0 ist gleich Null
%teste(.);
. ist Nichts

Beispiel 3

Diese Funktion überprüft die Existenz des Datensatzes und gibt den Datensazt, falls er existiert mit einer PROC PRINT Prozedur aus:

%macro myprint(dsn);
  %if %sysfunc(exist(&dsn)) %then
     %do;
        proc print data=&dsn;
        run;
     %end;
     %else
        %put Den Datensatz &dsn gibt es nicht.;
%mend;


%myprint(sashelp.shoes);

Hier wird diese Prozedur ausgeführt:

proc print data=sashelp.shoes;
run;
%myprint(sashelp.dad);

Führt im LOG zur Meldung:

Den Datensatz sashelp.dad gibt es nicht.


Weblinks

%sysfunc und %qsysfunc bei support.sas.com (englisch)