SAS naar Python: wat het echt kost

De meeste resultaten voor deze zoekopdracht zijn tools die Python maken uit SAS-broncode, en verschillende doen dat goed. Deze pagina begint een stap eerder: of de overstap überhaupt klopt voor uw codebase, wat het kost om het resultaat te controleren, en wat u doet als het antwoord nee is.

Het korte antwoord

Er zijn vier routes uit een SAS-codebase, niet twee: hem aan een automatische tool geven, hem met de hand herschrijven, de SAS-programma's ongewijzigd draaien op iets dat geen SAS is, of hem met rust laten. Welke de juiste is hangt bijna volledig af van twee vragen: hoeveel code er is, en of iemand de eerdere uitvoer moet reproduceren. Alles hieronder is wat elke route kost.

Wanneer Python het juiste antwoord is

Python is vaker de betere bestemming dan een pagina als deze gewoonlijk toegeeft. Vier voorwaarden maken het duidelijk: de codebase is klein genoeg om in een week door één persoon te worden gelezen, het team schrijft toch al dagelijks Python, de analyse wordt sowieso opnieuw opgebouwd, en niets verderop eist dat de nieuwe cijfers exact gelijk zijn aan de oude. Gelden alle vier, dan is opnieuw schrijven goedkoper dan welke compatibiliteitslaag ook, en houdt u code over die uw team kan onderhouden zonder een tweede taal mee te dragen.

Vier routes en wat elk kost

Elke optie hier is voor iemand het juiste antwoord. Geen enkele is zonder kosten, en het dure deel is nooit de syntaxis.

Een automatische converter

Webtools, leveranciersdiensten en grote taalmodellen nemen .sas-broncode aan en geven Python terug, waarbij DATA-stappen meestal op pandas worden afgebeeld en de gangbare procedures op statsmodels of scikit-learn. Voor een paar honderd regels rechttoe rechtaan databewerking is dat een echte kortere weg, en u hebt in minuten een leesbaar beginpunt. De rekening komt later: elke regel van de uitvoer moet gelezen worden door iemand die beide talen kent.

Met de hand herschrijven

Iemand leest het SAS-programma, achterhaalt wat het moest doen, en schrijft dat in Python. Het begint trager en het is de enige route die eindigt met code in de vorm van Python in plaats van SAS in een Python-jas. Teams die twee jaar later nog tevreden zijn over Python kwamen er bijna allemaal zo, meestal door het oude programma ernaast te laten draaien tot de cijfers klopten.

De programma's ongewijzigd draaien — 100 procedures

De route die de vergelijkingspagina's overslaan. Jenner is een clean-room-implementatie van de SAS 9.4-taal, geschreven in Rust: het leest SAS7BDAT-bestanden rechtstreeks en voert .sas-broncode uit zoals die er staat, dus er is geen gegenereerde code om na te lezen en geen tweede taal voor het team. Wat het niet doet, is de hele SAS-taal dekken, en de dekking wordt procedure voor procedure gepubliceerd zodat u de uwe kunt nakijken voordat u erop bouwt.

Blijven waar u bent

Niets doen is een echte beslissing en vaak de juiste. Als de code stabiel is, de omgeving waarin hij draait dit jaar niet verdwijnt en niemand om verandering vraagt, heeft de migratie die u niet doet het beste rendement van deze pagina. Pak de vraag weer op wanneer een platformwissel, een audit of een wervingsprobleem hem afdwingt.

Wat het kost om omgezette code te vertrouwen

De manier waarop een automatische conversie faalt is niet de syntaxfout; die komt bij de eerste run boven. Het is het stille numerieke verschil. SAS vult tekstwaarden rechts aan met spaties en Python niet, SAS telt datums vanaf 1 januari 1960 terwijl pandas vanaf 1 januari 1970 telt, en een MERGE in een DATA-stap gedraagt zich niet als een merge van pandas wanneer de sleutel aan beide kanten herhaalt. Niets daarvan geeft een signaal. Er komt een bijna juist getal uit, en dat is de ergste soort fout. Daarom is de echte prijs een regel-voor-regel-lezing door iemand die beide talen beheerst, plus een periode waarin oud en nieuw naast elkaar op dezelfde invoer draaien tot de uitvoer overeenkomt — en die prijs groeit met de hoeveelheid code, niet met de vernuftigheid ervan.

Veelgestelde vragen

Ja, en de tools zijn beter dan ze waren. Webconverters en leveranciersdiensten nemen een .sas-bestand aan en geven Python terug, en een groot taalmodel (LLM) doet hetzelfde vanuit een chatvenster. Ze zijn allemaal goed in syntaxis, en geen van alle kan u vertellen of de cijfers nog kloppen. Behandel de uitvoer als een eerste versie, geschreven door iemand die uw data nooit heeft gezien.

Nee. Ze wordt uitgegeven door Jenner, een onafhankelijke clean-room-implementatie van de SAS 9.4-taal, geschreven in Rust. Ze voert .sas-programma's uit zoals ze geschreven zijn, op de SAS7BDAT-bestanden die u al hebt. Er wordt niets in een andere taal uitgegeven, dus er is geen gegenereerde broncode die iemand moet nalezen.

Meestal één Python-bestand per SAS-programma: DATA-stappen als pandas-bewerkingen, PROC SQL als pandas-joins of als SQL via een databasestuurprogramma, en de statistische procedures afgebeeld op statsmodels, scipy of scikit-learn waar een equivalent bestaat. Waar dat niet bestaat — een groot deel van de macrotaal, ODS-uitvoer, veel formats en informats — laat de tool een opmerking of zijn beste gok achter. In dat gat verdwijnt de beoordelingstijd.

Er zijn goede, en ze delen allemaal een grens die u wilt kennen voordat u erop leunt. Een spiekbriefje koppelt PROC MEANS aan een describe van pandas, PROC FREQ aan value_counts of een kruistabel, PROC SORT aan sort_values en een DATA-stap aan een reeks toekenningen. Dat is de syntaxislaag, en de syntaxis is niet het moeilijke deel. Wat geen enkele tabel kan vertalen is de semantiek eronder — omgang met ontbrekende waarden, BY-groepsverwerking, achterliggende spaties bij tekstvergelijkingen, het nulpunt van de datums — en daar gaat omgezette code stilletjes mis.

Ja, en voor een kort programma is het vaak de kortste weg naar een eerste versie. De valkuil is die van elke converter, erger gemaakt door vlotheid: een LLM schrijft code die overtuigend leest of ze nu klopt of niet, en verzint een plausibel equivalent voor een procedure-optie die het niet kent. De oplossing is niet een betere prompt. Het is het model een manier geven om beide versies uit te voeren en de uitvoer te vergelijken, zodat de controle mechanisch wordt in plaats van een kwestie van hoe zelfverzekerd het antwoord klonk.

Van buitenaf kan niemand het u zeggen, en een pagina die u een getal geeft, gokt. De twee variabelen die ertoe doen zijn hoeveel regels er zijn en hoe hard de eis is dat de nieuwe uitvoer overeenkomt met de oude. Een paar duizend regels zonder reproductie-eis is een project dat een klein team afmaakt; een gevalideerde codebase waarvan eerdere resultaten reproduceerbaar moeten zijn is een programma met een testbudget, en het coderen is daarvan het kleine deel.

Wanneer de uitvoer moet reproduceren wat de oude programma's opleverden en iemand buiten het team dat gaat controleren. Wanneer de codebase zo groot is dat niemand hem helemaal heeft gelezen. Wanneer de mensen die de analyse begrijpen niet de mensen zijn die Python schrijven. Elk van die gevallen maakt van een programmeerklus een validatieklus, en het is de validatie die deze projecten laat uitlopen.

De SAS-programma's draaien zonder SAS. Een onafhankelijke implementatie van de SAS-taal voert de .sas-broncode uit die u al hebt, wat betekent: geen gegenereerde code om na te lezen en geen tweede taal in de kamer. Jenner is er zo een. Altair SLC, vroeger WPS, is een andere en doet dit al veel langer. Deze route is het doorrekenen waard wanneer de reden om te vertrekken het platform of de licentie is en niet de taal zelf.

Ja. SAS7BDAT-bestanden worden rechtstreeks gelezen, dus er hoeft niets eerst naar CSV te worden geëxporteerd. Dat telt zwaarder dan het klinkt. Een migratie die begint met elke dataset naar tekst dumpen erft een tweede reeks verschillen — coderingen, numerieke precisie, datumverwerking — bovenop die in de code, en daarna kan niemand meer zeggen uit welke laag een afwijking komt.

Niet de hele SAS-taal, en dat is de eerlijke grens die tegen al het bovenstaande moet worden afgewogen. Elke geïmplementeerde procedure heeft een gepubliceerde referentiepagina, dus of een bepaalde PROC wordt ondersteund kunt u nakijken voordat u erop bouwt in plaats van het achteraf te ontdekken. Programma's die leunen op zeldzame procedure-opties, ODS-lay-outs of externe database-engines zijn de eerste plek om te kijken. De praktische test is uw eigen programma's draaien en de logs vergelijken; dat kost een middag en beslecht de vraag beter dan welke bewering op een pagina als deze ook.

Altair SLC, dat WPS was, draait SAS-taalprogramma's zonder SAS en doet dat al veel langer dan wij. Op een groot landschap, waar iemand anders uw randgeval al heeft geraakt en heeft laten repareren, is die geschiedenis echt geld waard. Zet ze allebei voor uw eigen code en vergelijk de logs. Het antwoord is meestal binnen een dag duidelijk, en het zijn niet altijd wij.

Dat is het gebruikelijke einde en een redelijk einde. Nieuwe analyses worden in Python geschreven omdat het team en de bibliotheken daar al zitten, terwijl de oudere gevalideerde programma's ongewijzigd blijven draaien tot er een reden is om eraan te komen. Het vermijdt de ergste versie van deze beslissing: in één klap code herschrijven die niemand het budget heeft om opnieuw te valideren. De twee kanten hoeven het alleen eens te zijn op de grens — de data die ze aan elkaar doorgeven — en niet regel voor regel.

Beslis het op uw eigen programma's

Uw code, uw data en de logs naast elkaar. Dat is de vergelijking die beslist, en die kan niemand voor u draaien.

Gratis proefperiode starten