SAS do Pythonu: co to doopravdy stojí

Většina výsledků tohoto hledání jsou nástroje, které ze zdroje v SAS vyrobí Python, a několik z nich to dělá dobře. Tahle stránka začíná o krok dřív: jestli je ten přesun pro vaši kódovou základnu vůbec správný, co stojí ověřit výsledek a co dělat, když odpověď zní ne.

Krátká odpověď

Z kódové základny v SAS nevedou dvě cesty, ale čtyři: předat ji automatickému nástroji, přepsat ji ručně, spustit SAS programy tak, jak jsou, na něčem, co není SAS, nebo ji nechat být. Která je správná, závisí skoro jen na dvou otázkách: kolik kódu je a jestli někdo musí zopakovat dřívější výstupy. Všechno níže je cena jednotlivých cest.

Kdy je Python správná odpověď

Python bývá lepším cílem častěji, než stránka jako tahle obvykle přizná. Čtyři podmínky dělají volbu jasnou: kódová základna je dost malá na to, aby ji jeden člověk přečetl za týden, tým už Python píše denně, analýza se stejně bude stavět znovu a nic dál po proudu nevyžaduje, aby nová čísla přesně odpovídala starým. Když platí všechny čtyři, vyjde napsání nanovo levněji než jakákoli vrstva kompatibility a zůstane kód, který tým udrží bez druhého jazyka.

Čtyři cesty a co která stojí

Každá možnost tady je pro někoho správná odpověď. Žádná není bez nákladů a drahá část nikdy není syntaxe.

Automatický konvertor

Webové nástroje, služby dodavatelů a velké jazykové modely vezmou zdroj .sas a vrátí Python, obvykle mapují kroky DATA na pandas a běžné procedury na statsmodels nebo scikit-learn. U několika stovek řádků přímočarého zpracování dat je to skutečná zkratka a čitelný výchozí bod máte za pár minut. Účet přijde později: každý řádek výstupu musí přečíst někdo, kdo umí oba jazyky.

Ruční přepis

Někdo přečte SAS program, zjistí, co měl dělat, a napíše to v Pythonu. Rozjezd je pomalejší a je to jediná cesta, která končí kódem tvarovaným jako Python, ne jako SAS v pythonovském kabátě. Týmy, které jsou s Pythonem spokojené i po dvou letech, se tam skoro vždycky dostaly takhle, obvykle tak, že nechaly starý program běžet vedle, dokud čísla nesouhlasila.

Spustit programy tak, jak jsou — 100 procedur

Cesta, kterou srovnávací stránky přeskakují. Jenner je implementace jazyka SAS 9.4 vytvořená v čisté místnosti a napsaná v Rustu: čte soubory SAS7BDAT přímo a spouští zdroj .sas tak, jak je, takže není co procházet v generovaném kódu a tým nemusí nosit druhý jazyk. Co nedělá, je pokrýt celý jazyk SAS, a pokrytí je zveřejněné proceduru po proceduře, takže si tu svou ověříte dřív, než na ni vsadíte.

Zůstat, kde jste

Nedělat nic je skutečné rozhodnutí a často to správné. Pokud je kód stabilní, prostředí, ve kterém běží, letos nezmizí a nikdo nežádá změnu, má migrace, kterou neuděláte, nejlepší návratnost na celé téhle stránce. Vraťte se k otázce, až ji vynutí změna platformy, audit nebo problém s náborem.

Co stojí důvěra v kód po automatickém převodu

Automatická konverze neselhává na syntaktické chybě; ta se ukáže hned při prvním spuštění. Selhává tichým číselným rozdílem. SAS doplňuje znakové hodnoty zprava mezerami a Python ne, SAS počítá data od 1. ledna 1960, zatímco pandas od 1. ledna 1970, a MERGE v kroku DATA se nechová jako merge v pandas, když se klíč opakuje na obou stranách. Nic z toho nic nehlásí. Vyjde číslo, které je skoro správně, a to je nejhorší druh chyby. Skutečná cena je proto čtení řádek po řádku od někoho, kdo ovládá oba jazyky, plus období, kdy staré a nové běží vedle sebe nad stejnými vstupy, dokud se výstupy neshodnou — a ta cena roste s množstvím kódu, ne s jeho vynalézavostí.

Časté dotazy

Dá, a nástroje jsou lepší než dřív. Webové konvertory a služby dodavatelů vezmou soubor .sas a vrátí Python a velký jazykový model (LLM) udělá totéž z okna chatu. Všechny umí syntaxi a žádný vám neřekne, jestli čísla pořád sedí. Berte výstup jako první návrh od někoho, kdo vaše data nikdy neviděl.

Není. Vydává ji Jenner, nezávislá implementace jazyka SAS 9.4 vytvořená v čisté místnosti a napsaná v Rustu. Spouští programy .sas přesně tak, jak jsou napsané, nad soubory SAS7BDAT, které už máte. Nic se nevydává v jiném jazyce, takže není žádný vygenerovaný zdroj, který by někdo musel procházet.

Obvykle jeden soubor Python na jeden SAS program: kroky DATA jako operace pandas, PROC SQL buď jako spojení v pandas, nebo jako SQL přes databázový ovladač, a statistické procedury namapované na statsmodels, scipy nebo scikit-learn tam, kde existuje protějšek. Kde neexistuje — velká část makrojazyka, výstup ODS, řada formátů a informátů — nástroj nechá komentář nebo svůj nejlepší odhad. V téhle mezeře mizí čas na kontrolu.

Existují dobré a všechny sdílejí jednu hranici, kterou je dobré znát, než se o ně opřete. Tahák spáruje PROC MEANS s describe v pandas, PROC FREQ s value_counts nebo křížovou tabulkou, PROC SORT se sort_values a krok DATA s řetězcem přiřazení. To je vrstva syntaxe a syntaxe není ta těžká část. Co žádná tabulka nepřeloží, je sémantika pod ní — zacházení s chybějícími hodnotami, zpracování po skupinách BY, koncové mezery při porovnávání znaků, počátek datumové osy — a právě tam se kód po automatickém převodu tiše mýlí.

Dokáže a u krátkého programu to bývá nejkratší cesta k prvnímu návrhu. Háček má každý konvertor, jen ho tady zhoršuje plynulost: LLM píše kód, který se čte přesvědčivě, ať je správně, nebo ne, a k volbě procedury, kterou nezná, si vymyslí věrohodný protějšek. Lékem není lepší prompt. Je jím dát modelu způsob, jak obě verze spustit a porovnat výstupy, aby kontrola byla mechanická, a ne otázkou toho, jak sebejistě odpověď zněla.

Zvenčí to nikdo neřekne a stránka, která vám dá číslo, hádá. Rozhodují dvě proměnné: kolik je řádků a jak tvrdý je požadavek, aby nový výstup souhlasil se starým. Pár tisíc řádků bez požadavku na reprodukci je projekt, který malý tým dotáhne; ověřená kódová základna, jejíž dřívější výsledky musí jít zopakovat, je program s rozpočtem na testy a psaní kódu je jeho malá část.

Když výstup musí zopakovat to, co dávaly staré programy, a zkontroluje to někdo mimo tým. Když je základna tak velká, že ji nikdo nepřečetl celou. Když lidé, kteří rozumí analýze, nejsou ti, kdo píší Python. Kterýkoli z těch případů promění programátorskou práci ve validační a právě validace nechává takové projekty přetéct.

Spouštět SAS programy bez SAS. Nezávislá implementace jazyka SAS spustí zdroj .sas, který už máte, což znamená žádný vygenerovaný kód k procházení a žádný druhý jazyk v místnosti. Jenner je jedna z nich. Altair SLC, dřív WPS, je další a dělá to podstatně déle. Tuhle cestu má smysl nacenit vždycky, když je důvodem k odchodu platforma nebo licence, a ne jazyk sám.

Přečte. Soubory SAS7BDAT se čtou přímo, takže se nic nemusí nejdřív exportovat do CSV. To znamená víc, než to zní. Migrace, která začne vysypáním každé datové sady do textu, zdědí druhou sadu rozdílů — kódování, číselná přesnost, čtení dat — navrch k těm, které už jsou v kódu, a pak nikdo neřekne, z které vrstvy rozdíl přišel.

Ne celý jazyk SAS, a to je poctivá hranice, kterou je třeba položit proti všemu výše. Každá implementovaná procedura má zveřejněnou referenční stránku, takže jestli je konkrétní PROC podporovaná, se dá ověřit dřív, než na ni vsadíte, místo aby se to zjistilo potom. Programy, které stojí na vzácných volbách procedur, rozvrženích ODS nebo externích databázových strojích, jsou první místo, kam se podívat. Praktická zkouška je spustit vlastní programy a porovnat logy; zabere odpoledne a rozhodne věc líp než jakékoli tvrzení na stránce, jako je tahle.

Altair SLC, dřív WPS, spouští programy v jazyce SAS bez SAS a dělá to podstatně déle než my. Na velkém parku, kde už někdo jiný narazil na váš hraniční případ a nechal ho opravit, má ta historie skutečnou cenu. Postavte oba před svůj vlastní kód a porovnejte logy. Odpověď bývá jasná do dne a nejsme to vždycky my.

To je obvyklý konec a rozumný. Nové analýzy se píšou v Pythonu, protože tým i knihovny už jsou tam, zatímco starší ověřené programy běží dál tak, jak jsou, dokud není důvod na ně sáhnout. Vyhne se tím nejhorší verzi tohohle rozhodnutí: přepsat naráz kód, na jehož opětovné ověření nikdo nemá rozpočet. Obě strany se musí shodnout jen na hranici — na datech, která si předávají — a ne řádek po řádku.

Rozhodněte to na vlastních programech

Váš kód, vaše data a logy vedle sebe. To je srovnání, které rozhoduje, a nikdo ho za vás nespustí.

Začít zkušební období zdarma