SAS:sta Pythoniin: mitä se oikeasti maksaa

Suurin osa tämän haun tuloksista on työkaluja, jotka tuottavat Pythonia SAS-lähdekoodista, ja moni niistä tekee sen hyvin. Tämä sivu alkaa askelta aiemmin: onko siirto ylipäätään oikea teidän koodikannallenne, mitä tuloksen tarkistaminen maksaa ja mitä teette, kun vastaus on ei.

Lyhyt vastaus

SAS-koodikannasta ulos vie neljä reittiä, ei kahta: anna se automaattiselle työkalulle, kirjoita se käsin uudelleen, aja SAS-ohjelmat sellaisinaan jollakin muulla kuin SAS:lla, tai jätä se rauhaan. Mikä niistä on oikea, ratkeaa lähes kokonaan kahdesta kysymyksestä: kuinka paljon koodia on ja onko jonkun toistettava se, mitä ohjelmat ennen tuottivat. Kaikki alla oleva on kunkin reitin hinta.

Milloin Python on oikea vastaus

Python on parempi määränpää useammin kuin tämänkaltainen sivu yleensä myöntää. Neljä ehtoa tekee valinnasta selvän: koodikanta on tarpeeksi pieni, että yksi ihminen lukee sen viikossa, tiimi kirjoittaa jo päivittäin Pythonia, analyysi rakennetaan joka tapauksessa uudelleen, eikä mikään myöhempi vaihe vaadi uusien lukujen täsmäävän vanhoihin tarkalleen. Kun kaikki neljä pätevät, uudelleenkirjoittaminen on halvempaa kuin mikään yhteensopivuuskerros, ja jäljelle jää koodia, jota tiimi ylläpitää ilman toista kieltä.

Neljä reittiä ja kunkin hinta

Jokainen tässä oleva vaihtoehto on jollekulle oikea vastaus. Yksikään ei ole vailla hintaa, eikä kallis osa ole koskaan syntaksi.

Automaattinen muunnin

Verkkotyökalut, toimittajien palvelut ja suuret kielimallit ottavat .sas-lähdekoodin ja palauttavat Pythonia, tyypillisesti kuvaten DATA-askeleet pandasiin ja tavallisimmat proseduurit statsmodelsiin tai scikit-learniin. Parin sadan rivin suoraviivaisessa datan käsittelyssä se on aito oikotie, ja luettava lähtökohta on käsissä minuuteissa. Lasku tulee myöhemmin: jokainen tulosrivi on luettava jonkun, joka osaa molemmat kielet.

Käsin uudelleen kirjoittaminen

Joku lukee SAS-ohjelman, päättelee mitä sen piti tehdä, ja kirjoittaa sen Pythonilla. Se lähtee hitaammin liikkeelle ja on ainoa reitti, joka päättyy koodiin, joka on Pythonin muotoista eikä SAS:ää Python-takissa. Tiimit, jotka ovat kahden vuoden päästä tyytyväisiä Pythoniin, päätyivät sinne melkein aina näin, yleensä antaen vanhan ohjelman käydä rinnalla kunnes luvut täsmäsivät.

Aja ohjelmat sellaisinaan — 100 proseduuria

Reitti, jonka vertailusivut ohittavat. Jenner on SAS 9.4 -kielen puhdastilatoteutus, kirjoitettu Rustilla: se lukee SAS7BDAT-tiedostot suoraan ja ajaa .sas-lähdekoodin sellaisenaan, joten luettavaa generoitua koodia ei ole eikä tiimille jää toista kieltä kannettavaksi. Mitä se ei tee, on kattaa koko SAS-kieli, ja kattavuus julkaistaan proseduuri kerrallaan, jotta voitte tarkistaa omanne ennen kuin luotatte siihen.

Pysykää siellä missä olette

Tekemättä jättäminen on aito päätös ja usein oikea. Jos koodi on vakaa, sen ajoympäristö ei katoa tänä vuonna eikä kukaan pyydä muutosta, migraatio jota ette tee tuottaa parhaiten kaikesta tällä sivulla. Palatkaa kysymykseen, kun alustan vaihto, auditointi tai rekrytointiongelma pakottaa siihen.

Mitä muunnettuun koodiin luottaminen maksaa

Automaattinen muunnos ei kaadu syntaksivirheeseen; se paljastuu ensimmäisellä ajolla. Se kaatuu hiljaiseen numeeriseen eroon. SAS täyttää merkkiarvot oikealta välilyönneillä eikä Python tee niin, SAS laskee päivämäärät 1. tammikuuta 1960 alkaen kun pandas laskee 1. tammikuuta 1970 alkaen, ja DATA-askeleen MERGE ei käyttäydy kuten pandasin merge silloin kun avain toistuu molemmilla puolilla. Mikään niistä ei hälytä. Ulos tulee luku, joka on melkein oikein, ja se on pahinta laatua oleva virhe. Siksi todellinen hinta on rivi riviltä lukeminen joltakulta, joka hallitsee molemmat kielet, sekä jakso jossa vanha ja uusi ajetaan rinnakkain samalla syötteellä kunnes tulosteet täsmäävät — ja se hinta kasvaa koodin määrän mukana, ei sen nokkeluuden.

Usein kysytyt kysymykset

Voi, ja työkalut ovat parempia kuin ennen. Verkkomuuntimet ja toimittajien palvelut ottavat .sas-tiedoston ja palauttavat Pythonia, ja suuri kielimalli (LLM) tekee saman chat-ikkunasta. Kaikki osaavat syntaksin, eikä yksikään osaa kertoa, täsmäävätkö luvut yhä. Kohdelkaa tulosta ensimmäisenä luonnoksena, jonka on kirjoittanut joku joka ei ole koskaan nähnyt teidän dataanne.

Ei. Sen julkaisee Jenner, riippumaton SAS 9.4 -kielen puhdastilatoteutus, joka on kirjoitettu Rustilla. Se ajaa .sas-ohjelmat täsmälleen sellaisina kuin ne on kirjoitettu, niiden SAS7BDAT-tiedostojen päällä jotka teillä jo on. Mitään ei tuoteta toisella kielellä, joten generoitua lähdekoodia ei jää kenenkään luettavaksi.

Yleensä yhden Python-tiedoston SAS-ohjelmaa kohden: DATA-askeleet pandas-operaatioina, PROC SQL joko pandas-liitoksina tai SQL:nä tietokanta-ajurin kautta, ja tilastolliset proseduurit kuvattuina statsmodelsiin, scipyyn tai scikit-learniin siellä missä vastine on olemassa. Siellä missä sitä ei ole — iso osa makrokielestä, ODS-tuloste, monet formaatit ja informaatit — työkalu jättää kommentin tai parhaan arvauksensa. Juuri siihen rakoon tarkistusaika menee.

Hyviä on, ja kaikilla on sama raja, joka kannattaa tietää ennen kuin niihin nojaa. Muistilappu vastaa PROC MEANS pandasin describeen, PROC FREQ value_countsiin tai ristiintaulukointiin, PROC SORT sort_valuesiin ja DATA-askeleen sijoitusten ketjuun. Se on syntaksikerros, eikä syntaksi ole se vaikea osa. Mitä mikään taulukko ei käännä, on alla oleva semantiikka — puuttuvien arvojen käsittely, BY-ryhmittäinen käsittely, loppuvälilyönnit merkkivertailuissa, päivämäärien nollakohta — ja juuri siellä muunnettu koodi menee hiljaa väärin.

Voi, ja lyhyessä ohjelmassa se on usein lyhin tie ensimmäiseen luonnokseen. Koukku on sama kuin jokaisella muuntimella, sujuvuuden pahentamana: LLM kirjoittaa koodia joka lukeutuu vakuuttavasti riippumatta siitä onko se oikein, ja keksii uskottavan vastineen proseduurivalinnalle jota se ei tunne. Ratkaisu ei ole parempi kehote. Se on antaa mallille tapa ajaa molemmat versiot ja verrata tulosteita, niin että tarkistus on mekaaninen eikä kiinni siitä miten varmalta vastaus kuulosti.

Ulkopuolelta kukaan ei osaa sanoa, ja sivu joka antaa teille luvun arvaa. Kaksi merkitsevää muuttujaa ovat rivien määrä ja se, kuinka kova vaatimus on että uusi tuloste täsmää vanhaan. Muutama tuhat riviä ilman toistettavuusvaatimusta on projekti jonka pieni tiimi saa valmiiksi; validoitu koodikanta jonka aiemmat tulokset on voitava toistaa on ohjelma jolla on testibudjetti, ja koodin kirjoittaminen on siitä pieni osa.

Kun tulosteen on toistettava se mitä vanhat ohjelmat tuottivat ja joku tiimin ulkopuolelta tarkistaa sen. Kun koodikanta on niin suuri ettei kukaan ole lukenut sitä kokonaan. Kun analyysin ymmärtävät ihmiset eivät ole niitä jotka kirjoittavat Pythonia. Mikä tahansa noista tekee koodaustyöstä validointityön, ja juuri validointi saa tällaiset hankkeet venymään.

SAS-ohjelmien ajaminen ilman SAS:ää. Riippumaton SAS-kielen toteutus ajaa sen .sas-lähdekoodin joka teillä jo on, mikä tarkoittaa ettei generoitua koodia tarvitse lukea eikä huoneeseen tule toista kieltä. Jenner on yksi näistä. Altair SLC, entinen WPS, on toinen ja on tehnyt tätä paljon kauemmin. Tämä reitti kannattaa hinnoitella aina kun lähdön syy on alusta tai lisenssi eikä kieli itse.

Lukee. SAS7BDAT-tiedostot luetaan suoraan, joten mitään ei tarvitse ensin viedä CSV:ksi. Se merkitsee enemmän kuin miltä kuulostaa. Migraatio joka alkaa kaatamalla jokaisen datajoukon tekstiksi perii toisen joukon eroja — merkistöt, numeerinen tarkkuus, päivämäärien tulkinta — niiden päälle jotka koodissa jo ovat, eikä sen jälkeen kukaan osaa sanoa mistä kerroksesta poikkeama tuli.

Ei koko SAS-kieltä, ja se on rehellinen raja jota on punnittava kaikkea yllä olevaa vastaan. Jokaisella toteutetulla proseduurilla on julkaistu referenssisivu, joten tietyn PROC-proseduurin tuki on tarkistettavissa ennen kuin siihen nojaa eikä vasta jälkikäteen. Ohjelmat jotka nojaavat harvinaisiin proseduurivalintoihin, ODS-asetteluihin tai ulkoisiin tietokantamoottoreihin ovat ensimmäinen paikka katsoa. Käytännön koe on ajaa omat ohjelmat ja verrata lokeja; se vie iltapäivän ja ratkaisee kysymyksen paremmin kuin mikään väite tämänkaltaisella sivulla.

Altair SLC, entinen WPS, ajaa SAS-kielisiä ohjelmia ilman SAS:ää ja on tehnyt sitä paljon kauemmin kuin me. Isossa kannassa, jossa joku muu on jo törmännyt teidän reunatapaukseenne ja saanut sen korjatuksi, se historia on oikeaa rahaa. Asettakaa molemmat oman koodinne eteen ja verratkaa lokeja. Vastaus on yleensä selvä päivässä, eikä se ole aina me.

Se on tavallinen lopputulos ja järkevä. Uudet analyysit kirjoitetaan Pythonilla koska tiimi ja kirjastot ovat jo siellä, kun taas vanhemmat validoidut ohjelmat pyörivät sellaisinaan kunnes on syy koskea niihin. Se välttää tämän päätöksen pahimman version: kerralla uudelleenkirjoitetun koodin jonka uudelleenvalidointiin kenelläkään ei ole budjettia. Puolten tarvitsee olla yhtä mieltä vain rajalla — datasta jota ne ojentavat toisilleen — eikä rivi riviltä.

Ratkaiskaa se omilla ohjelmillanne

Teidän koodinne, teidän datanne ja lokit rinnakkain. Se on vertailu joka ratkaisee, eikä kukaan voi ajaa sitä puolestanne.

Aloita ilmainen kokeilu