Hallo,
ich habe heute mal eine allgemeine Frage. Derzeit sind wir damit beschäftigt, unsere Nutzer von lokalen SAS-Einzelplatzanwendungen (SAS EG und SAS Editor) auf SAS-BI-Server umzustellen, in der für die Bearbeitung und das Starten von SAS-Programmen nur noch der EG genutzt werden kann. Dabei hat es sich herausgestellt, dass einige Nutzer bisher sehr intensiv mit dem SAS Editor in der Form gearbeitet haben, dass sie Ihre SAS-Programme in Katalogen organisiert haben. Der Aufruf dieser SAS-Programme sowie deren Bearbeitung ist mit dem EG, nach unseren bisherigen Erkenntnissen, nicht ohne Weiteres oder gar nicht möglich. Vielleicht fehlt uns aber auch nur das entsprechende Wissen 😉
Hat jemand Erfahrungen bei der Verwendung und Bearbeitung von SAS-Programmen, die in SAS-Katalogen organisiert sind, mit dem EG? Oder kennt jemand einen elegannten Weg, um die SAS-Programme aus einem SAS-Katalog in ein SAS-Projekt für den EG zu überführen?
Vielen Dank im Voraus und viele Grüße
Holger
Hi!
Wir mussten auch solche Programme mit Base SAS aus den Katalogen ziehen und als .sas Files speichern, um sie dem EG (und noch viel wichtiger: dem Versionierungssystem!) zugänglich zu machen.
EG sieht die Kataloge nicht mal.
Hat wahrscheinlich damit zu tun, dass Kataloge immer versionsabhängig sind.
Ich würde also im Vorfeld der Migration alle User anweisen, ihre Programme aus den Katalogen in eine entsprechende hierarchische Verzeichnisstruktur zu transferieren.
Hallo,
eventuell helfen diese beiden englischen Quellen:
Add-In für eGuide (aus dem Jahre 2010, daher evtl. nicht mehr funktionstüchtig)
http://blogs.sas.com/content/sasdummy/2010/05/10/viewing-sas-catalogs-from-sas-enterprise-guide/
Und hier eine generelle Übersicht zur Arbeit mit Katalogen:
http://www.lexjansen.com/nesug/nesug09/as/AS08.pdf
Vermutlich dürfte der Abschnitt
"Print Contents of Each Source Element in
Catalog to a PDF (or any other) File."
interessant sein, um die Programme aus den Katalogen zu bekommen.
Viele Grüße
Michael
Hallo Holger,
also ich würde auch empfehlen die Programme aus dem Katalog in das Dateisystem zu exportieren.
Ich meine PROC CATALOG hat hierfür eine Option mit der man ein Katalogelement in eine Fileref kopieren kann.
Zum Thema EG und Kataloge: es gibt ein Addin für den EG mit dem man Kataloge auch im EG anzeigen kann, siehe:
http://blogs.sas.com/content/sasdummy/2010/05/10/viewing-sas-catalogs-from-sas-enterprise-guide/
Viele Grüße,
Andreas
Hallo Holger,
der EG kann nicht direkt auf die Kataloge zugreifen, der SAS-Server schon. Wenn die Library allokiert ist, reicht folgendes Programm aus, um das als Source-Entry gespeicherte Programm auszuführen:
Filename in Catalog "pgms.test";
%Include in(test.source) / source2;
Das Filenamestatement referenziert den Katalog und mit %Include wir der Source-Entry angegeben, der ausgeführt werden soll.
Programme ändern und wieder als Katalog-Entry speichern geht über den EG erst mal nicht, deshalb bin ich, wie die anderen Kollegen, auch der Meinung dass es vernünftiger ist, die Entries zu exportieren und im Filesystem zu speichern, auch hier ein Beispiel, wie das gehen könnte:
Options mcompilenote = all;
* GP Catalog Entries im Dateisystem speichern *;
%* Cat2File
exportiert einen Source-Entry in eine Datei
fref Fileref auf den Katalog
entry Name des Entries [name.source]
file Zieldatei ["dir/file.sas"]
*;
%Macro Cat2File(fref,entry,file);
Data _Null_;
Infile &fref(&entry);
File &file;
Input;
Put _infile_;
Run;
%Mend;
%* ExportSources
steuert den Export fuer einen Katalog
cat Name des Kataloges (lib muss allokiert sein)
dir Zielverzeichnis in dem die Dateien angelegt werden
*;
%Macro ExportSources(cat,dir);
%Local fref listEntries i curEntry;
%Let cat = pgms.test;
%Let fref = in;
Ods exclude all;
Ods Output catalog_random=Work.TestContents;
Proc Catalog c=&cat;
Contents;
Run;
Quit;
Proc Sql noprint;
Select objname Into :listEntries Separated By " "
From Work.TestContents
Where type = "SOURCE"
;
Drop Table Work.TestContents;
Quit;
Filename &fref Catalog "&cat";
%Do i=1 %To %Sysfunc(countw(&listEntries));
%Let curEntry = %Scan(&listEntries,&i);
%Cat2File(&fref,&curEntry..source,"&dir./&curEntry..sas");
%End;
%Mend;
%ExportSources(pgms,f:/temp/test);
Makro %Cat2File exportiert den Code eines Entries in eine Datei, %ExportSources enthält die Steuerung: Der Inhalt des Kataloges wird ausgelesen und die SOURCE-Entries in eine Tabelle gespeichert. Daraus wird eine Liste gebildet und in einer Makrovariable gespeichert. Die anschließende Schleife ruft den Export für jeden Entry auf. Das Zielverzeichnis muss natürlich im Filesystem des SAS-Servers liegen, damit er dorthin schreiben kann.
Hoffe das hilft weiter, viele Grüße,
Grischa
Edit 11.11.2016
Da waren noch zwei Fehler im Programm, Beim Drop hat das TABLE gefehlt und beim Namen der Datei der zweite Punkt in &curEntry..sas Außerdem habe ich noch ein Ods Exclude all; ergänzt, damit die Ausgabe von Proc Contents nicht im Output-Fenster ausgegeben wrid.
Hallo,
ganz, ganz herzlichen Dank für die sehr hilfreichen Tipps. Ich glaube, mit diesen Informationen können wir jetzt einen Plan für das weitere Vorgehen bei unserer Migration erarbeiten.
Viele Grüße
Holger
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.