SAS σε Python: τι πραγματικά χρειάζεται

Τα περισσότερα αποτελέσματα αυτής της αναζήτησης είναι εργαλεία που παράγουν Python από πηγαίο κώδικα SAS, και αρκετά το κάνουν καλά. Αυτή η σελίδα ξεκινά ένα βήμα πιο πριν: αν η μετακίνηση είναι καν σωστή για τη δική σας βάση κώδικα, τι κοστίζει να επαληθευτεί το αποτέλεσμα και τι κάνετε όταν η απάντηση είναι όχι.

Η σύντομη απάντηση

Οι διαδρομές έξω από μια βάση κώδικα SAS είναι τέσσερις, όχι δύο: να δοθεί σε αυτόματο εργαλείο, να ξαναγραφτεί στο χέρι, να τρέξουν τα προγράμματα SAS όπως είναι πάνω σε κάτι που δεν είναι SAS, ή να μείνει ως έχει. Ποια είναι η σωστή κρίνεται σχεδόν αποκλειστικά από δύο ερωτήματα: πόσος κώδικας υπάρχει και αν κάποιος πρέπει να αναπαραγάγει ό,τι έδιναν τα προγράμματα πριν. Όλα όσα ακολουθούν είναι το κόστος κάθε διαδρομής.

Πότε η Python είναι η σωστή απάντηση

Η Python είναι ο καλύτερος προορισμός πιο συχνά απ' ό,τι παραδέχεται συνήθως μια σελίδα σαν αυτή. Τέσσερις συνθήκες κάνουν την επιλογή ξεκάθαρη: η βάση κώδικα είναι αρκετά μικρή ώστε ένα άτομο να τη διαβάσει σε μια εβδομάδα, η ομάδα γράφει ήδη Python καθημερινά, η ανάλυση θα ξαναχτιστεί ούτως ή άλλως, και τίποτα παρακάτω δεν απαιτεί οι νέοι αριθμοί να ταιριάζουν ακριβώς με τους παλιούς. Όταν ισχύουν και οι τέσσερις, το να ξαναγραφτεί βγαίνει φθηνότερα από οποιοδήποτε στρώμα συμβατότητας, και μένει κώδικας που η ομάδα συντηρεί χωρίς δεύτερη γλώσσα.

Τέσσερις διαδρομές και τι κοστίζει η καθεμία

Κάθε επιλογή εδώ είναι η σωστή απάντηση για κάποιον. Καμία δεν είναι χωρίς κόστος, και το ακριβό κομμάτι δεν είναι ποτέ η σύνταξη.

Ένας αυτόματος μετατροπέας

Εργαλεία στον ιστό, υπηρεσίες προμηθευτών και μεγάλα γλωσσικά μοντέλα παίρνουν πηγαίο .sas και επιστρέφουν Python, αντιστοιχίζοντας συνήθως τα βήματα DATA στο pandas και τις συνήθεις διαδικασίες στο statsmodels ή στο scikit-learn. Για μερικές εκατοντάδες γραμμές απλής επεξεργασίας δεδομένων είναι πραγματικά συντομότερο μονοπάτι, και δίνει ένα ευανάγνωστο σημείο εκκίνησης σε λεπτά. Ο λογαριασμός έρχεται αργότερα: κάθε γραμμή της εξόδου πρέπει να τη διαβάσει κάποιος που ξέρει και τις δύο γλώσσες.

Γράψιμο από την αρχή στο χέρι

Κάποιος διαβάζει το πρόγραμμα SAS, καταλαβαίνει τι έπρεπε να κάνει, και το γράφει σε Python. Ξεκινά πιο αργά και είναι η μόνη διαδρομή που καταλήγει σε κώδικα με σχήμα Python αντί για SAS με παλτό Python. Οι ομάδες που δύο χρόνια μετά είναι ευχαριστημένες με την Python έφτασαν εκεί σχεδόν πάντα έτσι, αφήνοντας συνήθως το παλιό πρόγραμμα να τρέχει δίπλα ώσπου να συμφωνήσουν οι αριθμοί.

Τρέξτε τα προγράμματα όπως είναι — 100 διαδικασίες

Η διαδρομή που οι σελίδες σύγκρισης παραλείπουν. Το Jenner είναι μια υλοποίηση καθαρού δωματίου της γλώσσας SAS 9.4 γραμμένη σε Rust: διαβάζει αρχεία SAS7BDAT απευθείας και εκτελεί πηγαίο .sas όπως είναι, οπότε δεν υπάρχει παραγόμενος κώδικας για έλεγχο ούτε δεύτερη γλώσσα να κουβαλά η ομάδα. Αυτό που δεν κάνει είναι να καλύπτει ολόκληρη τη γλώσσα SAS, και η κάλυψη δημοσιεύεται διαδικασία προς διαδικασία ώστε να ελέγξετε τη δική σας πριν στηριχτείτε σε αυτήν.

Να μείνετε εκεί που είστε

Το να μην κάνετε τίποτα είναι πραγματική απόφαση και συχνά η σωστή. Αν ο κώδικας είναι σταθερός, το περιβάλλον όπου τρέχει δεν εξαφανίζεται φέτος και κανείς δεν ζητά αλλαγή, η μετάβαση που δεν κάνετε έχει την καλύτερη απόδοση από οτιδήποτε σε αυτή τη σελίδα. Ξαναπιάστε το ερώτημα όταν το επιβάλει μια αλλαγή πλατφόρμας, ένας έλεγχος ή ένα πρόβλημα προσλήψεων.

Τι κοστίζει να εμπιστευτείτε κώδικα μετά από μετατροπή

Ο τρόπος που αποτυγχάνει μια αυτόματη μετατροπή δεν είναι το συντακτικό λάθος· αυτό εμφανίζεται στην πρώτη εκτέλεση. Είναι η σιωπηλή αριθμητική διαφορά. Η SAS γεμίζει τις τιμές χαρακτήρων με κενά στα δεξιά και η Python όχι, η SAS μετρά ημερομηνίες από την 1 Ιανουαρίου 1960 ενώ το pandas από την 1 Ιανουαρίου 1970, και ένα MERGE σε βήμα DATA δεν συμπεριφέρεται σαν merge του pandas όταν το κλειδί επαναλαμβάνεται και στις δύο πλευρές. Τίποτα από αυτά δεν εγείρει κάτι. Βγαίνει ένας αριθμός σχεδόν σωστός, που είναι το χειρότερο είδος λάθους. Γι' αυτό η πραγματική τιμή είναι μια ανάγνωση γραμμή προς γραμμή από κάποιον που κατέχει και τις δύο γλώσσες, συν μια περίοδος όπου παλιό και νέο τρέχουν δίπλα δίπλα στα ίδια δεδομένα ώσπου να συμφωνήσουν οι έξοδοι — και αυτή η τιμή μεγαλώνει με την ποσότητα του κώδικα, όχι με την ευφυΐα του.

Συχνές ερωτήσεις

Μπορείτε, και τα εργαλεία είναι καλύτερα από παλιά. Μετατροπείς στον ιστό και υπηρεσίες προμηθευτών παίρνουν ένα αρχείο .sas και επιστρέφουν Python, και ένα μεγάλο γλωσσικό μοντέλο (LLM) κάνει το ίδιο από ένα παράθυρο συνομιλίας. Όλα τα καταφέρνουν με τη σύνταξη, και κανένα δεν μπορεί να σας πει αν οι αριθμοί εξακολουθούν να βγαίνουν. Δείτε την έξοδο ως ένα πρώτο προσχέδιο γραμμένο από κάποιον που δεν είδε ποτέ τα δεδομένα σας.

Όχι. Τη δημοσιεύει το Jenner, μια ανεξάρτητη υλοποίηση καθαρού δωματίου της γλώσσας SAS 9.4 γραμμένη σε Rust. Εκτελεί προγράμματα .sas ακριβώς όπως είναι γραμμένα, πάνω στα αρχεία SAS7BDAT που ήδη έχετε. Τίποτα δεν εκπέμπεται σε άλλη γλώσσα, οπότε δεν υπάρχει παραγόμενος πηγαίος κώδικας για να ελέγξει κανείς.

Συνήθως ένα αρχείο Python ανά πρόγραμμα SAS: τα βήματα DATA ως πράξεις pandas, το PROC SQL είτε ως συνενώσεις pandas είτε ως SQL μέσω οδηγού βάσης δεδομένων, και οι στατιστικές διαδικασίες αντιστοιχισμένες σε statsmodels, scipy ή scikit-learn όπου υπάρχει αντίστοιχο. Όπου δεν υπάρχει — μεγάλο μέρος της γλώσσας μακροεντολών, η έξοδος ODS, πολλές μορφές και informats — το εργαλείο αφήνει ένα σχόλιο ή την καλύτερη εικασία του. Σε αυτό το κενό πάει ο χρόνος ελέγχου.

Υπάρχουν καλοί, και όλοι μοιράζονται ένα όριο που αξίζει να ξέρετε πριν στηριχτείτε σε κάποιον. Ένας τέτοιος πίνακας αντιστοιχίζει το PROC MEANS σε ένα describe του pandas, το PROC FREQ σε value_counts ή σε πίνακα διπλής εισόδου, το PROC SORT σε sort_values και ένα βήμα DATA σε μια αλυσίδα αναθέσεων. Αυτό είναι το επίπεδο της σύνταξης, και η σύνταξη δεν είναι το δύσκολο μέρος. Αυτό που κανένας πίνακας δεν μεταφράζει είναι η σημασιολογία από κάτω — ο χειρισμός των ελλιπών τιμών, η επεξεργασία κατά ομάδες BY, τα τελικά κενά στις συγκρίσεις χαρακτήρων, η αφετηρία των ημερομηνιών — και εκεί ακριβώς ο κώδικας μετά τη μετατροπή σφάλλει σιωπηλά.

Μπορεί, και για ένα σύντομο πρόγραμμα είναι συχνά ο συντομότερος δρόμος προς ένα πρώτο προσχέδιο. Η παγίδα είναι η παγίδα κάθε μετατροπέα, χειρότερη λόγω της ευφράδειας: ένα LLM γράφει κώδικα που διαβάζεται πειστικά είτε είναι σωστός είτε όχι, και θα εφεύρει ένα εύλογο αντίστοιχο για μια επιλογή διαδικασίας που δεν γνωρίζει. Η λύση δεν είναι καλύτερο prompt. Είναι να δοθεί στο μοντέλο τρόπος να εκτελέσει και τις δύο εκδοχές και να συγκρίνει τις εξόδους, ώστε ο έλεγχος να γίνει μηχανικός και όχι ζήτημα του πόσο σίγουρη ακουγόταν η απάντηση.

Κανείς δεν μπορεί να σας το πει απ' έξω, και μια σελίδα που σας δίνει αριθμό μαντεύει. Οι δύο μεταβλητές που μετρούν είναι πόσες γραμμές υπάρχουν και πόσο σκληρή είναι η απαίτηση η νέα έξοδος να ταιριάζει με την παλιά. Μερικές χιλιάδες γραμμές χωρίς απαίτηση αναπαραγωγής είναι έργο που μια μικρή ομάδα τελειώνει· μια επικυρωμένη βάση κώδικα της οποίας τα προηγούμενα αποτελέσματα πρέπει να αναπαράγονται είναι πρόγραμμα με προϋπολογισμό ελέγχων, και η συγγραφή του κώδικα είναι το μικρό του κομμάτι.

Όταν η έξοδος πρέπει να αναπαράγει ό,τι έδιναν τα παλιά προγράμματα και θα το ελέγξει κάποιος εκτός ομάδας. Όταν η βάση είναι τόσο μεγάλη που κανείς δεν την έχει διαβάσει ολόκληρη. Όταν οι άνθρωποι που καταλαβαίνουν την ανάλυση δεν είναι αυτοί που γράφουν Python. Καθένα από αυτά αλλάζει μια δουλειά προγραμματισμού σε δουλειά επικύρωσης, και η επικύρωση είναι που κάνει τέτοια έργα να ξεφεύγουν.

Να τρέχουν τα προγράμματα SAS χωρίς SAS. Μια ανεξάρτητη υλοποίηση της γλώσσας SAS εκτελεί τον πηγαίο .sas που ήδη έχετε, πράγμα που σημαίνει κανέναν παραγόμενο κώδικα για έλεγχο και καμία δεύτερη γλώσσα στο δωμάτιο. Το Jenner είναι ένα από αυτά. Το Altair SLC, πρώην WPS, είναι ένα άλλο και το κάνει πολύ περισσότερο καιρό. Αυτή η διαδρομή αξίζει κοστολόγηση κάθε φορά που ο λόγος της αποχώρησης είναι η πλατφόρμα ή η άδεια και όχι η ίδια η γλώσσα.

Θα τα διαβάσει. Τα αρχεία SAS7BDAT διαβάζονται απευθείας, οπότε τίποτα δεν χρειάζεται να εξαχθεί πρώτα σε CSV. Αυτό μετράει περισσότερο απ' ό,τι ακούγεται. Μια μετάβαση που ξεκινά αδειάζοντας κάθε σύνολο δεδομένων σε κείμενο κληρονομεί ένα δεύτερο σύνολο διαφορών — κωδικοποιήσεις, αριθμητική ακρίβεια, ανάγνωση ημερομηνιών — πάνω σε αυτές που ήδη υπάρχουν στον κώδικα, και μετά κανείς δεν μπορεί να πει από ποιο στρώμα ήρθε μια απόκλιση.

Όχι ολόκληρη τη γλώσσα SAS, και αυτό είναι το ειλικρινές όριο που πρέπει να ζυγιστεί απέναντι σε όλα τα παραπάνω. Κάθε υλοποιημένη διαδικασία έχει δημοσιευμένη σελίδα αναφοράς, οπότε το αν μια συγκεκριμένη PROC υποστηρίζεται ελέγχεται πριν στηριχτείτε σε αυτήν αντί να το ανακαλύψετε μετά. Τα προγράμματα που ακουμπούν σε σπάνιες επιλογές διαδικασιών, σε διατάξεις ODS ή σε εξωτερικές μηχανές βάσεων δεδομένων είναι το πρώτο σημείο για έλεγχο. Η πρακτική δοκιμή είναι να τρέξετε τα δικά σας προγράμματα και να συγκρίνετε τα αρχεία καταγραφής· παίρνει ένα απόγευμα και κρίνει το ζήτημα καλύτερα από κάθε ισχυρισμό σε σελίδα σαν αυτή.

Το Altair SLC, που ήταν το WPS, τρέχει προγράμματα σε γλώσσα SAS χωρίς SAS και το κάνει πολύ περισσότερο καιρό από εμάς. Σε μεγάλο απόθεμα, όπου κάποιος άλλος έχει ήδη συναντήσει την ακραία σας περίπτωση και την έχει δει να διορθώνεται, αυτό το ιστορικό αξίζει πραγματικά χρήματα. Βάλτε και τα δύο μπροστά στον δικό σας κώδικα και συγκρίνετε τα αρχεία καταγραφής. Η απάντηση συνήθως είναι προφανής μέσα σε μια μέρα, και δεν είμαστε πάντα εμείς.

Αυτό είναι το συνηθισμένο τέλος και λογικό. Οι νέες αναλύσεις γράφονται σε Python επειδή εκεί βρίσκονται ήδη η ομάδα και οι βιβλιοθήκες, ενώ τα παλαιότερα επικυρωμένα προγράμματα συνεχίζουν να τρέχουν όπως είναι μέχρι να υπάρξει λόγος να τα πειράξει κανείς. Αποφεύγει τη χειρότερη εκδοχή αυτής της απόφασης: να ξαναγραφτεί μονομιάς κώδικας που κανείς δεν έχει προϋπολογισμό να επικυρώσει ξανά. Οι δύο πλευρές χρειάζεται να συμφωνούν μόνο στο όριο — στα δεδομένα που παραδίδουν η μία στην άλλη — και όχι γραμμή προς γραμμή.

Κρίνετέ το με τα δικά σας προγράμματα

Ο κώδικάς σας, τα δεδομένα σας και τα αρχεία καταγραφής δίπλα δίπλα. Αυτή είναι η σύγκριση που αποφασίζει, και κανείς δεν μπορεί να την τρέξει για εσάς.

Ξεκινήστε δωρεάν δοκιμή