Handouts zum SAS-Forums-Vortrag "SAS Know-how im Handgepäck - SAS9 vor Augen"

Wie vorigen Donnerstag auf dem SAS Forum in Bonn versprochen, hier nun die Vortragshandouts (auf "weiterlesen" klicken). Da die Vollversion sehr viele Screenshots enthält, habe ich die Handouts aufgeteilt. Wer die Beispielprogramme haben möchte, schicke mir bitte eine e-Mail über Redscope.

Aufgeteilt, mit Screenshots:

  • Einleitung
  • Schritt 1: "SAS-Know-how im Handgepäck" - Vom Makro zum Stored Process
  • Schritt 2: "Makros in neuem Gewand" - SAS Stored Processes
  • Schritt 3: "Stets zu Diensten" - SAS-Programme als Webservices über SOAP aufrufen
  • Schritt 4: "Den Anwender bei der Hand nehmen" - Anwendungsroutinen für SAS Enterprise Guide entwickeln
  • Schritt 5: "Wie sag ich’s der OMA?" - Den Metadatenserver schlau nutzen

Webservices in SAS 9.2

Zum Thema Webservices hier noch eine Zusatzinfo: ein SUGI-Artikel nimmt unter anderem zu der Frage Stellung, was sich in SAS 9.2 hier ändern wird.
In SAS 9.2 werden die SAS BI Webservices MTOM (Message Transmission Optimization Mechanism) unterstützen, so dass man auch Images und andere Dateien zurückgeben kann (ohne den Weg einzuschlagen, den ich im Schritt 3 beschrieben habe). Außerdem soll die WSDL-Unterstützung in SAS 9.2 besser werden.

STPDefineParameter-Macro

Hallo Herr Mangold,

ich habe das STPDefineParameter-Macro jetzt zum laufen gebracht. Ist ein sehr praktisches Macro wie ich finde. Einziges Problem ist, dass ich bis jetzt nur Eingaben mit Numeric-Werten analog Ihres Beispiels benutzen konnte. Bei String-Eingabewerten bekomme ich in der Management Console unter Parameter-Constraints einen xml-Formatierungsfehler.

Ist Ihnen dies schon gelungen?

Schöne Grüße
Jens Schäfer

Habe es erfolgreich mit String-Parametern ausprobiert

Tut mir leid - hat etwas gedauert.
Ich konnte folgendes Beispiel mit einem Stringparameter zum Laufen bekommen (der Stored Process hat einen String-Parameter namens parm ohne Gruppe):

/* Werteliste zusammenstellen */
DATA parmlist;
   val =
'AAA'; OUTPUT;
   val =
'BBB'; OUTPUT;
   val =
'CCC'; OUTPUT;
RUN;

/* In den Metadaten speichern */
OPTIONS MPRINT;
%STPDefineParameter(
   STP       = /Samples/SAS Forum
2006/Strings
  ,PARM      = parm  
  ,ENUMDATA  = parmlist
  ,VALUECOL  = val
  ,REQUIRED  = Y
  ,DEFAULT   = AAA
  ,PARMVAR   = parm
);
Wichtig ist, dass man alle Eigenschaften des Stored-Process-Parameters angibt, auch die, die man eigentlich nicht ändern möchte.

%stpdefineparameter übernimmt keine Formate ?

Hallo Herr Mangold,

wir haben Ihr Beispiel zum Ändern von Wertelisten mittels %stpdefineparameter ausprobiert. Das klappte auch wunderbar.
Allerdings haben wir für unsere produktiven Beispiele häufig den Fall, dass der auswählbare Wert formatiert dargestellt werden soll, weil sich Schlüsselwerte dahinter verbergen. Unsere Feststellung ist, dass die formatierten Werte nicht korrekt übernommen werden. Als Beispiel eine Modifikation Ihres Modells:

/* Die update Datei für den Parameter year wurde folgendermassen erzeugt */
PROC SQL NOPRINT;
    
CREATE TABLE work.year AS
      
SELECT DISTINCT year FROM sashelp.orsales;
   
INSERT INTO work.year VALUES (2003);
   
INSERT INTO work.year VALUES (2004);
   
INSERT INTO work.year VALUES (2005);
QUIT;

data year;
    
set year;
    yearcol= year;
    
format yearcol z8.;
run;

/* das sind die Parameter für das Makro, labelcol wurde für die
   formatierte Variable aufgenommen */

%STPDefineParameter(
   STP       = //Foundation/TestVerzeichnis/orsales
  ,PARMGROUP = Datenauswahl
  ,PARM      = Bitte das Jahr auswählen
  ,ENUMDATA  = work.year
  ,VALUECOL  = year
  ,LABELCOL  = yearcol
  ,REQUIRED  = Y
  ,DEFAULT   =
2005
  
,PARMVAR   = year
);

Das Programm lief fehlerfrei. In der Workdatei ENUMTEMP ist die Anzeige korrekt. Im Stored Process werden die Formate leider nicht übernommen. Haben Sie die gleiche Erfahrung gemacht oder können Sie uns einen Hinweis auf einen möglichen Fehler geben?
Mit freundlichem Gruß Catrin Skamira

formatierten Wert statt Wert mit Format

Ich kann das jetzt gerade nicht ausprobieren, nehme aber an, dass es funktioniert, wenn Sie das Format explizit anwenden:

data year;
    
set year;
    yearcol= put(year,
z8.);
run;

Charaktervarialen zum Anzeigen der Formate

Hallo Herr Mangold,
danke für die Reaktion. Ja, das hatten wir ausprobiert. Wenn man Charaktervariablen mit den formatierten Werten bei labelcol übergibt, geht alles soweit gut.

Freundlicher Gruß
Catrin Skamira

Problem erkannt...

Kein Problem. Ich bin jetzt auch drauf gekommen, warum es bei mir nicht funktioniert hat. Ich hatte bei meiner Eingabedatei für die Parameterliste verschiedene Namen, die auch das Sonderzeichen '&' enthielten. Dabei gab es Probleme in der MC, wobei man bei direkter Eingabe eines Parameters in der MC diese Zeichen verwenden kann.

das folgende Beispiel würde so nicht funktionieren, an der Stelle muss man aufpassen.

DATA parmlist;
   val =
'AAA & DDD'; OUTPUT;  * <-- '&' Sonderzeichen;
   
val = 'BBB'; OUTPUT;
   val =
'CCC'; OUTPUT;
RUN;

OPTIONS MPRINT;
%STPDefineParameter(
   STP       = /Test/Test Parameterliste
/*  ,PARMGROUP = / */                           /* Name Parametergruppe */
  
,PARM      = GA_Name                          /* Name Parameter */
  
,ENUMDATA  = parmlist                         /* Datei mit Parameterwerten */
  
,VALUECOL  = val                              /* Spalte, die die Werte enthlt */
  
,REQUIRED  = Y                                /* Der Parameter ist erforderlich */
  
,DEFAULT   = MUSTER                           /* Voreinstellung angeben */
  
,PARMVAR   = user_ga_name                     /* Die Makrovariable des Parameters */
);

SAS Stored Processes und Display Manager

Kann man SAS Stored Processes auch mit dem Display Manager erstellen?

MfG Moritz Duhme
ING DiBa

Displaymanager plus Management Console

Wenn man nicht den SAS Enterprise Guide verwenden möchte (was ich immer bevorzugen würde), kann man wie folgt vorgehen:

  1. den Display Manager verwenden, um das Programm zu schreiben, das im Stored Process arbeiten soll und um bei Bedarf die Makros %STPBEGIN und %STPEND einzutragen, also das Programm für den Einsatz als Stored Process vorzubereiten.
  2. die Metadaten des Stored Processes erstellen, dazu den BI-Manager in der SAS Management Console verwenden.
  3. das Programm auf dem Server an der richtigen Stelle speichern, also in dem Verzeichnis, das man in den Metadaten unter "Quellcoderepository" angegeben hat unter dem unter "Quelldatei" angegebenen Namen.

Theoretisch ist es denkbar, dass man auch durch Aufrufe des Metadaten-APIs im SAS Data Step die entsprechenden Einträge in den Metadaten erstellt. Das ist aber nicht dokumentiert und nicht zu empfehlen, so lange es von SAS nicht durch Bereitstellung entsprechender Makros oder auch einer eigenen Prozedur (PROC STP?) unterstützt wird. Warten wir ab, was die Version 9.2 bringen wird.