Veröffentlicht am :
ETL CREATION_INTERNE

Eine lokale CSV-Datei hochladen und ein SAS-Format anwenden

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Die 'upload'-Aktion des 'table action set' in PROC CAS wird verwendet, um eine CSV-Datei vom lokalen Dateisystem des Clients (oder des Compute-Servers, falls dort ausgeführt) in eine In-Memory-Tabelle in CAS zu übertragen. Die Option 'importOptions' ist entscheidend, da sie die Angabe des Dateityps (CSV) ermöglicht, anzeigt, ob die erste Zeile Spaltennamen enthält ('getNames=True'), und vor allem die Anwendung spezifischer Informate und Formate auf Variablen über den Unterparameter 'vars'. Für Datumsangaben im Format 'MM/TT/JJJJ' wird das Informat 'mmddyy10.' verwendet, um die Zeichenfolge in einen numerischen SAS©-Wert (Anzahl der Tage seit dem 1. Januar 1960) zu konvertieren, und das Format 'nldate20.' wird anschließend angewendet, um diese numerischen Werte lesbar und lokal anzuzeigen. Jedes Beispiel enthält die Erstellung einer temporären CSV-Datei, um Autonomie und Ausführbarkeit zu gewährleisten.
Datenanalyse

Type : CREATION_INTERNE


Die Beispiele verwenden CSV-Daten, die direkt im SAS-Code über einen DATA _NULL_ Schritt generiert werden, was die Verfügbarkeit einer lokalen CSV-Datei simuliert.

1 Codeblock
PROC CAS / UPLOAD Data
Erklärung :
Dieses Beispiel veranschaulicht das Hochladen einer einfachen CSV-Datei. Zuerst wird eine CSV-Datei namens 'myusage_basic.csv' mit Basisdaten erstellt. Anschließend wird die `upload`-Aktion in `PROC CAS` verwendet, um diese Datei in eine CAS-Tabelle namens 'myusage_basic' zu laden. Die `importOptions` geben an, dass es sich um eine CSV-Datei handelt, dass die erste Zeile Spaltennamen enthält (`getNames=True`), und wenden das Informat `mmddyy10.` und das Format `nldate20.` auf die Datumsspalten (`recorddt`, `startdt`, `enddt`) an, um sie korrekt zu interpretieren. Schließlich zeigt `print myusage_basic(obs=3)` die ersten drei Beobachtungen der geladenen Tabelle an.
Kopiert!
1/* Création du fichier CSV local */
2DATA _NULL_;
3 FILE "/tmp/myusage_basic.csv" DSD LRECL=200;
4 PUT 'account,high,low,recorddt,startdt,enddt,kwh';
5 PUT '1000001,82,71,07/03/2013,07/01/2013,07/02/2013,54';
6 PUT '1000001,85,70,07/02/2013,06/30/2013,07/01/2013,70';
7 PUT '1000001,85,68,07/01/2013,06/29/2013,06/30/2013,78';
8RUN;
9 
10/* Connexion au serveur CAS (remplacer par vos infos) */
11*options cashost='cloud.example.com' casport=5570;
12cas casauto;
13 
14PROC CAS;
15 SESSION casauto;
16 upload path="/tmp/myusage_basic.csv"
17 casout={name="myusage_basic", replace=True},
18 importOptions={
19 fileType="csv",
20 getNames=True,
21 vars={
22 recorddt={informat="mmddyy10.", FORMAT="nldate20."},
23 startdt={informat="mmddyy10.", FORMAT="nldate20."},
24 enddt={informat="mmddyy10.", FORMAT="nldate20."}
25 }};
26 
27 PRINT myusage_basic(obs=3);
28RUN;
29QUIT;
30 
31/* Suppression du fichier CSV temporaire */
32x "rm /tmp/myusage_basic.csv";
2 Codeblock
PROC CAS / UPLOAD Data
Erklärung :
Dieses Beispiel erweitert den Grundfall, indem es eine Spalte 'cost' hinzufügt und `promote=True` für die CAS-Tabelle verwendet, wodurch diese für alle CAS-Sitzungen verfügbar wird. Die CSV-Datei 'myusage_inter.csv' wird mit einer neuen Spalte 'cost' erstellt. Beim Hochladen werden das Informat `comma8.2` und das Format `dollar10.2` auf die Spalte 'cost' angewendet, um monetäre Werte zu verwalten. Nach dem Hochladen wird die Aktion `table.columnInfo` verwendet, um die Eigenschaften der Spalten, einschließlich der angewendeten Informate und Formate, zu überprüfen, und anschließend wird die vollständige Tabelle angezeigt.
Kopiert!
1/* Création du fichier CSV local avec plus de données */
2DATA _NULL_;
3 FILE "/tmp/myusage_inter.csv" DSD LRECL=200;
4 PUT 'account,high,low,recorddt,startdt,enddt,kwh,cost';
5 PUT '1000001,82,71,07/03/2013,07/01/2013,07/02/2013,54,12.50';
6 PUT '1000001,85,70,07/02/2013,06/30/2013,07/01/2013,70,15.75';
7 PUT '1000002,85,68,07/01/2013,06/29/2013,06/30/2013,78,20.00';
8 PUT '1000002,90,70,06/30/2013,06/28/2013,06/29/2013,72,18.25';
9 PUT '1000003,88,68,06/29/2013,06/27/2013,06/28/2013,54,10.00';
10RUN;
11 
12/* Connexion au serveur CAS (remplacer par vos infos) */
13*options cashost='cloud.example.com' casport=5570;
14cas casauto;
15 
16PROC CAS;
17 SESSION casauto;
18 upload path="/tmp/myusage_inter.csv"
19 casout={name="myusage_inter", replace=True, promote=True},
20 importOptions={
21 fileType="csv",
22 getNames=True,
23 vars={
24 recorddt={informat="mmddyy10.", FORMAT="nldate20."},
25 startdt={informat="mmddyy10.", FORMAT="nldate20."},
26 enddt={informat="mmddyy10.", FORMAT="nldate20."},
27 cost={informat="comma8.2", FORMAT="dollar10.2"}
28 }};
29 
30 TABLE.columnInfo RESULT=r / TABLE={name='myusage_inter'};
31 PRINT r;
32 
33 PRINT myusage_inter;
34RUN;
35QUIT;
36 
37/* Suppression du fichier CSV temporaire */
38x "rm /tmp/myusage_inter.csv";
3 Codeblock
PROC CAS / UPLOAD Data
Erklärung :
Dieses fortgeschrittene Beispiel verwendet Makrovariablen (`%LET`), um den Namen der CSV-Datei (einschließlich Systemdatum und -zeit für die Eindeutigkeit), den Namen der CAS-Tabelle und die Caslib dynamisch zu definieren. Vor dem Hochladen enthält es eine Bedingungslogik (`if table.tableInfo(...) then do; table.dropTable...; end;`), um eine vorhandene CAS-Tabelle mit demselben Namen zu löschen und eine saubere Ausführung zu gewährleisten. Die CSV-Datei wird erstellt und hochgeladen. Neue Informate/Formate (`date9.`, `comma10.2`, `dollar10.2`) werden für verschiedene Datentypen verwendet. Schließlich wird ein Befehl `x "rm &CSV_FILE";` hinzugefügt, um die temporäre Datei im Betriebssystem zu bereinigen.
Kopiert!
1/* Création du fichier CSV local */
2%LET CSV_FILE = /tmp/mydata_advanced_&sysdate._%sysfunc(compress(&systime.)).csv;
3%LET CAS_TABLE = mydata_advanced;
4%LET CAS_LIB = CASUSER;
5 
6DATA _NULL_;
7 FILE "&CSV_FILE" DSD LRECL=200;
8 PUT 'ID,Category,Value,EntryDate';
9 PUT '1,A,123.45,12-JAN-2023';
10 PUT '2,B,678.90,01-FEB-2023';
11 PUT '3,A,111.22,03-MAR-2023';
12 PUT '4,C,333.33,15-APR-2023';
13RUN;
14 
15/* Connexion au serveur CAS (remplacer par vos infos) */
16*options cashost='cloud.example.com' casport=5570;
17cas casauto;
18 
19PROC CAS;
20 SESSION casauto;
21 /* Vérifier si la table existe déjà et la supprimer si nécessaire */
22 IF TABLE.tableInfo(caslib="&CAS_LIB", name="&CAS_TABLE") THEN DO;
23 TABLE.dropTable caslib="&CAS_LIB" name="&CAS_TABLE";
24 END;
25 
26 upload path="&CSV_FILE"
27 casout={name="&CAS_TABLE", caslib="&CAS_LIB", replace=True, promote=True},
28 importOptions={
29 fileType="csv",
30 getNames=True,
31 vars={
32 EntryDate={informat="date9.", FORMAT="nldate20."},
33 Value={informat="comma10.2", FORMAT="dollar10.2"}
34 }};
35 
36 PRINT &CAS_TABLE;
37RUN;
38QUIT;
39 
40/* Supprimer le fichier CSV temporaire après utilisation */
41x "rm &CSV_FILE";
4 Codeblock
PROC CAS / UPLOAD, FEDSQL, SAVETABLE Data
Erklärung :
Dieses Beispiel veranschaulicht einen vollständigen Workflow in einer Viya/CAS-Umgebung. Es beginnt mit der Erstellung einer CSV-Datei 'transactions.csv'. Anschließend lädt die `upload`-Aktion diese Daten in eine CAS-Tabelle 'raw_transactions' und wendet Informate/Formate (`yymmdd10.`, `comma10.2`, `dollar10.2`) für Daten und Beträge an. Der nächste Schritt verwendet `fedsql.execDirect`, um eine SQL-Abfrage direkt auf die In-Memory-CAS-Daten auszuführen und die Transaktionen nach `CustomerID` zu aggregieren, um die Gesamtzahl der Transaktionen und den insgesamt ausgegebenen Betrag zu berechnen. Die resultierende aggregierte Tabelle wird dann dauerhaft in der Caslib 'CASUSER' als SASHDA-Datei (`table.save`) gespeichert. Schließlich wird die aggregierte Tabelle angezeigt. Dieser Prozess verdeutlicht die Fähigkeit von CAS, das Laden, Verarbeiten und Speichern von Daten im Speicher zu verwalten.
Kopiert!
1/* Création du fichier CSV local */
2DATA _NULL_;
3 FILE "/tmp/transactions.csv" DSD LRECL=200;
4 PUT 'TransactionID,CustomerID,Amount,TransactionDate,ProductCode';
5 PUT '1,C001,150.75,2023-01-15,PROD001';
6 PUT '2,C002,230.00,2023-01-16,PROD002';
7 PUT '3,C001,50.25,2023-01-15,PROD003';
8 PUT '4,C003,100.00,2023-01-17,PROD001';
9 PUT '5,C002,75.50,2023-01-16,PROD004';
10RUN;
11 
12/* Connexion au serveur CAS (remplacer par vos infos) */
13*options cashost='cloud.example.com' casport=5570;
14cas casauto;
15 
16PROC CAS;
17 SESSION casauto;
18 caslib _all_ assign;
19 
20 /* 1. Charger le fichier CSV */
21 upload path="/tmp/transactions.csv"
22 casout={name="raw_transactions", replace=True, promote=True},
23 importOptions={
24 fileType="csv",
25 getNames=True,
26 vars={
27 TransactionDate={informat="yymmdd10.", FORMAT="nldate20."},
28 Amount={informat="comma10.2", FORMAT="dollar10.2"}
29 }};
30 
31 /* 2. Effectuer une agrégation avec FedSQL sur la table CAS */
32 fedsql.execDirect RESULT=res / query="
33 CREATE TABLE aggregated_transactions AS
34 SELECT
35 CustomerID,
36 COUNT(TransactionID) AS TotalTransactions,
37 SUM(Amount) AS TotalAmountSpent
38 FROM raw_transactions
39 GROUP BY CustomerID
40 ORDER BY TotalAmountSpent DESC;
41 ";
42 PRINT res;
43 
44 /* 3. Sauvegarder la table agrégée dans une caslib (ex: CASUSER) */
45 TABLE.save RESULT=saveres /
46 TABLE={name="aggregated_transactions", caslib="CASUSER"},
47 name="aggregated_transactions.sashdat",
48 replace=True;
49 PRINT saveres;
50 
51 /* 4. Afficher les résultats agrégés */
52 PRINT aggregated_transactions;
53RUN;
54QUIT;
55 
56x "rm /tmp/transactions.csv";
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Copyright © SAS Institute Inc. Alle Rechte vorbehalten