SAS zu Python: was es wirklich kostet

Die meisten Treffer zu dieser Suche sind Werkzeuge, die aus SAS-Quelltext Python erzeugen, und einige davon machen das gut. Diese Seite setzt einen Schritt früher an: ob der Wechsel für Ihre Codebasis überhaupt richtig ist, was die Prüfung des Ergebnisses kostet und was zu tun ist, wenn die Antwort Nein lautet.

Die kurze Antwort

Es gibt vier Wege aus einer SAS-Codebasis heraus, nicht zwei: einem automatischen Werkzeug übergeben, von Hand neu schreiben, die SAS-Programme unverändert auf etwas anderem als SAS ausführen, oder alles so lassen. Welcher richtig ist, hängt fast nur an zwei Fragen — wie viel Code es gibt und ob jemand die früher erzeugten Ergebnisse reproduzieren muss. Alles Weitere ist, was jeder Weg kostet.

Wann Python die richtige Antwort ist

Python ist häufiger das bessere Ziel, als eine Seite wie diese normalerweise zugibt. Vier Bedingungen machen es eindeutig: die Codebasis ist klein genug, dass eine Person sie in einer Woche liest, das Team schreibt ohnehin täglich Python, die Analyse wird sowieso neu aufgebaut, und nichts weiter unten verlangt, dass die neuen Zahlen exakt den alten entsprechen. Wenn alle vier zutreffen, ist ein Neuschreiben billiger als jede Kompatibilitätsschicht, und am Ende steht Code, den Ihr Team ohne eine zweite Sprache pflegen kann.

Vier Wege und was jeder kostet

Jede Option hier ist für jemanden die richtige Antwort. Keine davon ist ohne Kosten, und der teure Teil ist nie die Syntax.

Ein automatischer Konverter

Web-Werkzeuge, Anbieterdienste und große Sprachmodelle nehmen .sas-Quelltext und geben Python zurück, wobei DATA-Steps üblicherweise auf pandas und die gängigen Prozeduren auf statsmodels oder scikit-learn abgebildet werden. Für ein paar hundert Zeilen geradliniger Datenaufbereitung ist das eine echte Abkürzung und liefert in Minuten einen lesbaren Ausgangspunkt. Die Rechnung kommt später: jede Zeile der Ausgabe muss jemand lesen, der beide Sprachen kennt.

Ein Neuschreiben von Hand

Jemand liest das SAS-Programm, versteht, was es tun sollte, und schreibt das in Python. Das ist am Anfang langsamer und ist der einzige Weg, an dessen Ende Code steht, der wie Python aussieht und nicht wie SAS im Python-Mantel. Teams, die zwei Jahre später mit Python zufrieden sind, sind meist so dorthin gekommen und haben das alte Programm daneben weiterlaufen lassen, bis die Zahlen übereinstimmten.

Die Programme unverändert ausführen — 100 Prozeduren

Der Weg, den die Vergleichsseiten auslassen. Jenner ist eine Clean-Room-Implementierung der SAS-9.4-Sprache in Rust: sie liest SAS7BDAT-Dateien direkt und führt .sas-Quelltext so aus, wie er dasteht, es gibt also keinen erzeugten Code zum Nachlesen und keine zweite Sprache für das Team. Was sie nicht leistet, ist die vollständige Abdeckung der SAS-Sprache, und die Abdeckung ist Prozedur für Prozedur veröffentlicht, damit Sie Ihre prüfen können, bevor Sie sich darauf verlassen.

Bleiben, wo Sie sind

Nichts zu tun ist eine echte Entscheidung und oft die richtige. Wenn der Code stabil ist, die Umgebung, in der er läuft, dieses Jahr nicht verschwindet und niemand eine Änderung verlangt, hat die Migration, die Sie nicht machen, die beste Rendite auf dieser Seite. Greifen Sie die Frage wieder auf, wenn ein Plattformwechsel, eine Prüfung oder ein Personalproblem sie erzwingt.

Was konvertierter Code an Vertrauen kostet

Der Fehlermodus einer automatischen Konvertierung ist kein Syntaxfehler; der zeigt sich beim ersten Lauf. Es ist der stille numerische Unterschied. SAS füllt Zeichenwerte rechts mit Leerzeichen auf und Python nicht, SAS zählt Datumswerte ab dem 1. Januar 1960 und pandas ab dem 1. Januar 1970, und ein MERGE im DATA-Step verhält sich nicht wie ein pandas-merge, wenn der Schlüssel auf beiden Seiten mehrfach vorkommt. Nichts davon löst irgendetwas aus. Es entsteht eine Zahl, die fast stimmt, und das ist die schlimmste Art falsch. Der wahre Preis einer Konvertierung ist deshalb ein zeilenweises Lesen durch jemanden, der beide Sprachen beherrscht, plus eine Phase, in der Alt und Neu auf denselben Daten nebeneinander laufen, bis die Ausgaben übereinstimmen — und dieser Preis wächst mit der Menge an Code, nicht mit seiner Raffinesse.

Häufige Fragen

Ja, und die Werkzeuge sind besser als früher. Web-Konverter und Anbieterdienste nehmen eine .sas-Datei und geben Python zurück, und ein großes Sprachmodell (LLM) tut dasselbe aus einem Chatfenster heraus. Alle sind gut in Syntax, und keines kann Ihnen sagen, ob die Zahlen noch stimmen. Behandeln Sie das Ergebnis als ersten Entwurf von jemandem, der Ihre Daten nie gesehen hat.

Nein. Sie wird von Jenner veröffentlicht, einer unabhängigen Clean-Room-Implementierung der SAS-9.4-Sprache in Rust. Sie führt .sas-Programme so aus, wie sie geschrieben sind, auf den SAS7BDAT-Dateien, die Sie bereits haben. Es wird nichts in einer anderen Sprache ausgegeben, also gibt es keinen erzeugten Quelltext zum Nachlesen.

Meist eine Python-Datei je SAS-Programm: DATA-Steps als pandas-Operationen, PROC SQL entweder als pandas-Joins oder als SQL über einen Datenbanktreiber, und die statistischen Prozeduren abgebildet auf statsmodels, scipy oder scikit-learn, wo es eine Entsprechung gibt. Wo es keine gibt — große Teile der Makro-Facility, ODS-Ausgabe, viele Formate und Informate — hinterlässt das Werkzeug einen Kommentar oder seine beste Vermutung. In dieser Lücke steckt die Prüfzeit.

Es gibt gute, und alle teilen eine Grenze, die man kennen sollte, bevor man sich darauf verlässt. Ein Spickzettel bildet PROC MEANS auf ein describe von pandas ab, PROC FREQ auf value_counts oder eine Kreuztabelle, PROC SORT auf sort_values und einen DATA-Step auf eine Kette von Zuweisungen. Das ist die Syntaxebene, und die Syntax ist nicht der schwere Teil. Was keine Tabelle übersetzen kann, ist die Semantik darunter — Umgang mit fehlenden Werten, BY-Gruppenverarbeitung, nachgestellte Leerzeichen im Zeichenvergleich, der Datumsursprung — und genau dort geht konvertierter Code still daneben.

Ja, und bei einem kurzen Programm ist das oft der kürzeste Weg zu einem ersten Entwurf. Der Haken ist der Haken jedes Konverters, durch Sprachgewandtheit verschärft: ein LLM schreibt Code, der überzeugend klingt, ob er stimmt oder nicht, und erfindet eine plausible Entsprechung für eine Prozeduroption, die es nicht kennt. Die Abhilfe ist nicht besseres Prompten. Sie besteht darin, dem Modell einen Weg zu geben, beide Fassungen auszuführen und die Ausgaben zu vergleichen, damit die Prüfung mechanisch wird und nicht eine Frage des selbstsicheren Tons.

Von außen kann das niemand sagen, und eine Seite, die Ihnen eine Zahl nennt, rät. Die beiden Variablen, auf die es ankommt, sind die Anzahl der Zeilen und wie hart die Forderung ist, dass neue Ausgaben den alten entsprechen. Ein paar tausend Zeilen ohne Reproduktionspflicht sind ein Projekt, das ein kleines Team abschließt; eine validierte Codebasis, deren frühere Ergebnisse reproduzierbar sein müssen, ist ein Programm mit Testbudget, und das Programmieren ist der kleine Teil davon.

Wenn die Ausgabe reproduzieren muss, was die alten Programme erzeugt haben, und jemand außerhalb des Teams das prüft. Wenn die Codebasis groß genug ist, dass niemand sie ganz gelesen hat. Wenn die Leute, die die Analyse verstehen, nicht die Leute sind, die Python schreiben. Jeder dieser Punkte macht aus einer Programmieraufgabe eine Validierungsaufgabe, und Validierung ist es, was solche Vorhaben sprengt.

Die SAS-Programme ohne SAS ausführen. Eine unabhängige Implementierung der SAS-Sprache führt den .sas-Quelltext aus, den Sie schon haben, es gibt also keinen erzeugten Code zum Nachlesen und keine zweite Sprache im Raum. Jenner ist eine davon. Altair SLC, früher WPS, ist eine andere und macht das deutlich länger. Dieser Weg lohnt eine Kalkulation, wann immer der Grund für den Wechsel die Plattform oder die Lizenz ist und nicht die Sprache selbst.

Ja. SAS7BDAT-Dateien werden direkt gelesen, es muss also nichts zuerst nach CSV exportiert werden. Das zählt mehr, als es klingt. Eine Migration, die damit beginnt, jeden Datensatz nach Text zu kippen, erbt einen zweiten Satz Unterschiede — Kodierungen, numerische Genauigkeit, Datumsauswertung — obendrauf auf die im Code, und danach weiß niemand mehr, aus welcher Schicht eine Abweichung stammt.

Nicht die ganze SAS-Sprache, und das ist die ehrliche Grenze, die gegen alles oben aufzuwiegen ist. Jede implementierte Prozedur hat eine veröffentlichte Referenzseite, ob also eine bestimmte PROC unterstützt wird, lässt sich vorher prüfen statt hinterher entdecken. Programme, die auf seltenen Prozeduroptionen, ODS-Layouts oder externen Datenbank-Engines aufbauen, sind die erste Stelle zum Nachsehen. Der praktische Test ist, Ihre eigenen Programme laufen zu lassen und die Logs zu vergleichen; das dauert einen Nachmittag und klärt die Frage besser als jede Behauptung auf einer Seite wie dieser.

Altair SLC, früher WPS, führt SAS-Sprachprogramme ohne SAS aus und tut das weit länger als wir. Auf einem großen Bestand, wo jemand anderes Ihren Sonderfall längst getroffen und gemeldet hat, ist diese Geschichte echtes Geld wert. Stellen Sie beide vor Ihren eigenen Code und vergleichen Sie die Logs. Die Antwort ist meist innerhalb eines Tages klar, und sie lautet nicht immer wir.

Das ist das übliche Ende und ein vernünftiges. Neue Analysen entstehen in Python, weil dort das Team und die Bibliotheken schon sind, während die älteren validierten Programme unverändert weiterlaufen, bis es einen Grund gibt, sie anzufassen. Das vermeidet die schlimmste Fassung dieser Entscheidung: ein Neuschreiben auf einen Schlag von Code, für dessen erneute Validierung niemand Budget hat. Die beiden Seiten müssen sich nur an der Grenze einig sein — bei den Daten, die sie einander übergeben — und nicht Zeile für Zeile.

Entscheiden Sie es an Ihren eigenen Programmen

Ihr Code, Ihre Daten und die Logs nebeneinander. Das ist der Vergleich, der die Sache entscheidet, und niemand kann ihn für Sie laufen lassen.

Kostenlos testen