Community deutschsprachiger SAS-Anwender und -Programmierer

Antworten
Dies ist eine offene Gruppe. Melden Sie sich an und klicken Sie auf die Schaltfläche „Gruppe beitreten“, um Mitglied zu werden und damit zu beginnen, Beiträge in dieser Gruppe zu veröffentlichen.
Highlighted
N/A
Beiträge: 1
SAS Programm direkt auf SAS Server laufen lassen

Hallo! Hab folgendes Problem: In der Regel erstellen wir unsere SAS Programme in einer SAS Client Umgebung (lokal installiertes SAS Base 9.3 unter Windows), wobei per remote auf unseren SAS Server zugegriffen wird und anschl. mittels "rsubmit ... endrsubmit" alle data steps etc. auf unserem SAS Server laufen (auch die Datenbanken auf die zugegriffen wird befinden sich dort). Alles kein Problem! Nun ist es erforderlich einen SAS Job (SAS Programm) per batch laufen zu lassen, soll heißen, es wird überprüft ob eine bestimmte Datei vorhanden ist, wenn ja, startet ein batch Programm das lokal installierte SAS Programm und führt den code aus (welches u.a. diese vohandenen Datei dann weiter verarbeitet). Aus diversen Gründen suche ich nach einer Möglichkeit, NICHT per batch Programm das lokal installierte SAS Programm aufzurufen und laufen zu lassen. Vielmehr soll das SAS Programm direkt auf dem SAS Server liegen und dort gestartet werden (wenn irgendein spezielles Ereignis eintritt, bspw. ein bestimmtes file vorhanden ist). Kann man ein SAS Programm (im Prinzip dasselbe Programm dass bisher im Client unter Windows lief) direkt auf den SAS Server legen und dort aufrufen (ohne lokale SAS Client Version)? Wie kann dieses dann gestartet werden und wie kann die Ausführung überwacht werden? Merci vorab! prof

Frequent Contributor
Beiträge: 117
Re: SAS Programm direkt auf SAS Server laufen lassen

Hallo prof,

das sollte kein Problem darstellen.

Falls entsprechende Lizenzen und Installationen vorhanden sind, kannst Du im Data Integration Studio einen Job erstellen und diesen anschließend in der Management Console im Schedule Manager verplanen.

Das hier im Detail zu beschreiben wäre wohl zu aufwändig und hängt, wie gesagt, eben vom vorhandenen Setup ab.

Ein direkter Aufruf auf der Server ist auch möglich. Z.B. per Cronjob unter Unix mit folgendem Aufruf:

/<Pfad zu SAS-Batch-Server>/sas.sh -log /<Pfad wo das Log hin soll>/log/name_des_programms_#Y.#m.#d_#H.#M.#s.log -batch -noterminal -logparm "rollover=session"  -sysin /<Pfad wo das Programm auf dem Server liegt>/Programmname.sas

Die Bedingung, ob ein File vorhanden ist, kann entweder im Batch geprüft werden, oder man programmiert eine Schleife mit "Sleep" im SAS Programm und führt den Code im Macro nur aus, wenn bestimmte Bedingungen erfüllt sind.

Auf einem Windows-Server geht das mit dem Task-Planer sicherlich analog.

Viele Grüße

Michael

N/A
Beiträge: 1
Re: SAS Programm direkt auf SAS Server laufen lassen

Super! Vielen Dank! Funktioniert wunderbar! Auch wenn ich nicht so ganz weiß was diese jeweiligen Einstellungen bedeuten/bewirken: -batch -noterminal -logparm "rollover=session"  -sysin Könnten Sie mir hierzu vielleicht noch kurz was schreiben?  ;-) Besten Dank!

Frequent Contributor
Beiträge: 117
Re: SAS Programm direkt auf SAS Server laufen lassen

Hallo prof,

das ist schön zu hören!

Bis ins Detail kann ich die Parameter auch nicht zuordnen, vielleicht kann hier noch jemand aushelfen oder ergänzen. Meine Erklärungen:

-batch -- SAS läuft dann im Batch-Modus. Das könnte redundant zu "noterminal" sein. Leider finde ich in der Doku gerade keine weiteren Hinweise dazu. Wir wollen für die automatische Verarbeitung ja nicht den interaktiven Modus von SAS nutzen, bei dem ggf. ein User noch Eingaben während dem Ablauf des Programms machen muss, sondern wir wollen den automatisierten Batch-Modus verwenden.

-noterminal -- SAS läuft "ohne Terminal", sprich: es werden keine Dialogboxen für eventuellen Input oder Output generiert. Ein typischer Server-Parameter, wo eben niemand vor dem Bildschirm sitzt und die Verarbeitung der SAS-Programme verfolgt.

-logparm "rollover=session" -- legt den Logging-Parameter für "Rollover" fest. Das gibt an, was SAS machen soll, wenn z.B. ein Log voll läuft. Oder wann jeweils neue Log-Files erstellt werden sollen. In Kombination mit dem oben aufgeführten Parameter "-log" wird in diesem Fall vorgegeben, dass für diese SAS-Session (also diesen einen Aufruf) nur ein Log erstellt werden soll, das den oben angegeben Namen, bzw. entsprechende Uhrzeit hat. (hier finden sich noch weitere Infos dazu)

-sysin -- gibt an, welche Datei oder in diesem Fall welches SAS-Programm der Input für diese Session sein soll.

Ich hoffe, das hilft weiter.

Beste Grüße

Michael

Super User
Beiträge: 7.452
Re: SAS Programm direkt auf SAS Server laufen lassen

Je nach Inhalt des Programms werden die meisten Parameter nicht notwendig sein. zB braucht man das rollover nicht, wenn sowieso Datum und Uhrzeit im namen des Logs verpackt sind, die "Session" endet automatisch mit Ende des Programmlaufs.

Im Batch verwenden wir "nur" den Programmnamen und die -noterminal, -log, -autoexec und -config Optionen.

Wenn Output in den Programmen erzeugt wird, dann per ODS und definierten Dateinamen, es wird als kein .lst automatisch erzeugt.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Frequent Contributor
Beiträge: 117
Re: SAS Programm direkt auf SAS Server laufen lassen

Ja, mit den default "rollover=none" sollte das kein Problem sein, danke für den Hinweis.

Ich habe hier einfach einen Aufruf aus dem DI-Studio von unserem System genommen ;-) dort wird das immer so mitgegeben.