SELECT

Aus SAS-Wiki
Wechseln zu: Navigation, Suche

Die SELECT-Anweisung ist eine (ausführbare) Anweisung, um im Datenschritt (Data Step) mehrere Anweisungen unter verschiedenen Bedingungen auszuführen. Sie kann als Alternative zu IF-THEN-ELSE-Schachtelungen verwendet werden.

Syntax

Syntax 1 mit Parameter:

SELECT (Variable);
 WHEN (Wert1 <,Wert11>) Anweisung1;
 WHEN (Wert2 <,Wert21>) Anweisung2;
 WHEN (Wert3 <,Wert31>) 
  DO;
   Anweisung3;
   Anweisung4;
  END;   
 <OTHERWISE <Anweisung>;>  
END;   

Die Anweisung1 wird ausgeführt, wenn Variable=Wert1 oder Variable=Wert11 ist. Ansonsten wird Anweisung2 ausgeführt, wenn Variable=Wert2 oder Variable=Wert21 ist. u.s.w. Optional kann eine OTHERWISE Anweisung ergänzt werden, die ausgeführt wird wenn keine der vorher genannten Ausprägungen Wert1, Wert2 u.s.w. für die Variable vorkommen. Falls mehr als eine Anweisung bedingt ausgeführt werden soll, so müssen diese jeweils in einem DO-END Block zusammengefasst werden. Die SELECT Anweisung muss mit END abgeschlossen werden. Es ist generell empfehlenswert die OTHERWISE Anweisung zu verwenden, um damit unerwartete Bedingungen abzufangen, die z.B. durch 'Missing Value' hervorgerufen sind.

Syntax 2 ohne Parameter:

SELECT ;
 WHEN (Bedingung1) Anweisung1;
 WHEN (Bedingung2) Anweisung2;
 WHEN (Bedingung3)
  DO;
   Anweisung3;
   Anweisung4;
  END;   
 <OTHERWISE <Anweisung>;>  
END;   

Die Anweisung1 wird ausgeführt, wenn Bedingung1 wahr ist. Ansonsten wird Anweisung2 ausgeführt, wenn Bedingung2 wahr ist. u.s.w. Optional kann eine OTHERWISE Anweisung ergänzt werden, die ausgeführt wird wenn keine der vorher genannten Bedingungen zutrifft. Falls mehr als eine Anweisung bedingt ausgeführt werden soll, so müssen diese jeweils in einem DO-END Block zusammengefasst werden. Die SELECT Anweisung muss mit END abgeschlossen werden. Es ist generell empfehlenswert die OTHERWISE Anweisung zu verwenden, um damit unerwartete Bedingungen abzufangen, die z.B. durch 'Missing Value' hervorgerufen sind.

Beispiele

DATA jungs maedchen andere;
 SET sashelp.class;
 SELECT (sex);
  WHEN ("M") OUTPUT jungs;
  WHEN ("F") OUTPUT maedchen;
  OTHERWISE  OUTPUT andere;
 END;
RUN;
DATA klasse;
 SET sashelp.class;
 SELECT ;
  WHEN (0 <= age < 14) Gruppe=1;
  WHEN (age  >= 14)    Gruppe=2;
  OTHERWISE ;                   /* führt zu "Gruppe = ." für ". <= age < 0" */
 END;
RUN;

Details

Entsprechend der ausschließenden Logik von IF-THEN-ELSE Schachtelungen wird jeweils nur die erste zutreffende Anweisungen ausgeführt. Die Anweisungen nachfolgender zutreffender Bedingungen werden nicht ausgeführt.

Wenn keine der genannten Bedingungen zutrifft und keine OTHERWISE Anweisung vorhanden ist, kommt es zu einem Laufzeitfehler. Um den Laufzeitfehler zu verhindern, kann man einen OTHERWISE Zweig ohne nachfolgende Anweisung(en) einfügen.

Siehe auch

Weblinks