Veröffentlicht am :

Lesen und Schreiben externer Dateien

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Der Datenzugriff ist eine grundlegende Aufgabe in der SAS©-Programmierung. Dieser Leitfaden behandelt das Lesen externer Dateien über die INFILE-Anweisung und das Schreiben über die FILE-Anweisung, entweder durch direkte Angabe des physischen Pfades oder durch Verwendung von Filerefs für einen indirekten Verweis. Das effiziente Verwalten mehrerer Dateien wird auch durch die Zuweisung von Filerefs zu aggregierten Speicherorten dargestellt. Erweiterte Zugriffsmethoden wie CATALOG, DATAURL, FTP, Hadoop, SOCKET, URL und WebDAV werden aufgelistet. Ein Abschnitt widmet sich dem Lesen binärer Daten mithilfe spezifischer SAS©-Informats, wobei die Parameter RECFM und LRECL für spaltenweise binäre Daten betont werden. Schließlich sind Beispiele zur Optimierung des Datenladens in CAS mit dem DVR-Format integriert.
Datenanalyse

Type : MIXTE


Die Beispiele verwenden generierte Daten (Datalines) für CAS-Demonstrationen, aber andere Beispiele hängen von externen Dateien ab, die nicht im Code erstellt wurden (markiert external_data_not_found: 1).

1 Codeblock
DATA STEP
Erklärung :
Dieses Beispiel zeigt, wie Rohdaten aus einer externen Datei mithilfe der INFILE- und INPUT-Anweisungen gelesen werden. INFILE ist erforderlich, da die Quelldaten aus einer externen Textdatei stammen.
Kopiert!
1DATA weight;
2 INFILE or
3 INPUT PatientID $ Week1 Week8 Week16;
4 loss=Week1-Week16;
5RUN;
2 Codeblock
DATA STEP
Erklärung :
Gibt die Datei an, die die Eingabedaten enthält, indem ihr physischer Name direkt in Anführungszeichen verwendet wird.
Kopiert!
1DATA weight;
2 INFILE 'input-file';
3 INPUT idno $ week1 week16;
4 loss=week1-week16;
5RUN;
3 Codeblock
DATA STEP
Erklärung :
Identifiziert die Datei, in die die PUT-Anweisung die Daten schreibt. Dieses Beispiel zeigt das Schreiben von Bedingungen basierend auf einer Variablen 'loss'.
Kopiert!
1file 'output-file';
2DATA STATUS;
3 IF loss ge 5 and loss le 9 THEN
4 put idno loss 'AWARD STATUS=3';
5 ELSE IF loss ge 10 and loss le 14 THEN
6 put idno loss 'AWARD STATUS=2';
7 ELSE IF loss ge 15 THEN
8 put idno loss 'AWARD STATUS=1';
9RUN;
4 Codeblock
%INCLUDE statement
Erklärung :
Ermöglicht es, Anweisungen oder Rohdaten aus einer anderen Datei in Ihren SAS-Job zu integrieren und auszuführen.
Kopiert!
1%include 'source-file';
5 Codeblock
DATA STEP / FILENAME statement
Erklärung :
Weist einer Eingabedatei einen Fileref 'mydata' zu und verwendet diesen Fileref dann in der INFILE-Anweisung, um die Daten zu lesen.
Kopiert!
1filename mydata 'input-file';
2DATA weight;
3 INFILE mydata;
4 INPUT idno $ week1 week16;
5 loss=week1-week16;
6RUN;
6 Codeblock
PROC IMPORT / FILENAME statement
Erklärung :
Weist einer Eingabedatei einen Fileref 'mydata' zu und verwendet dann PROC IMPORT, um die Daten zu importieren, und PROC PRINT, um sie anzuzeigen.
Kopiert!
1filename mydata 'input-file';
2PROC IMPORT datafile=mydata
3 out=shoes dbms=dlm replace;
4RUN;
5PROC PRINT DATA=shoes; RUN;
7 Codeblock
DATA STEP / FILENAME statement
Erklärung :
Weist einer Ausgabedatei einen Fileref 'myreport' und einer Eingabedatei einen Fileref 'mydata' zu und liest dann die Daten, um einen neuen Datensatz zu erstellen.
Kopiert!
1filename myreport 'output-file';
2DATA myreport;
3 INFILE mydata;
4 INPUT idno $ week1 week16;
5 loss=Week1-Week16;
6RUN;
8 Codeblock
PROC EXPORT Data
Erklärung :
Exportiert den SASHELP.SHOES-Datensatz in die durch 'myreport' referenzierte externe Datei, wobei ein Leerzeichen als Trennzeichen verwendet wird.
Kopiert!
1PROC EXPORT DATA=sashelp.shoes
2 outfile=myreport dbms=dlm replace;
3 delimiter=' ';
4RUN;
9 Codeblock
FILENAME statement
Erklärung :
Weist einer Datei, die Programmanweisungen enthält, einen Fileref 'mypgm' zu.
Kopiert!
1filename mypgm 'source-file';
10 Codeblock
FILENAME statement
Erklärung :
Weist einem Ausgabegerät einen Fileref 'myprinter' zu, der durch seinen Typ und die Host-Optionen angegeben wird.
Kopiert!
1filename myprinter
2;
3 
11 Codeblock
DATA STEP
Erklärung :
Verwendet den (zuvor zugewiesenen) Fileref 'mydata' in der INFILE-Anweisung, um die Daten zu lesen.
Kopiert!
1DATA weight;
2 INFILE mydata;
3 INPUT idno $ week1 week16;
4 loss=week1-week16;
12 Codeblock
DATA STEP
Erklärung :
Verwendet den (zuvor zugewiesenen) Fileref 'myreport' in der FILE-Anweisung, um Daten bedingt zu schreiben.
Kopiert!
1file myreport;
2 IF loss ge 5 and loss le 9 THEN
3 put idno loss 'AWARD STATUS=3';
4 ELSE IF loss ge 10 and loss le 14 THEN
5 put idno loss 'AWARD STATUS=2';
6 ELSE IF loss ge 15 THEN
7 put idno loss 'AWARD STATUS=1';
8RUN;
13 Codeblock
%INCLUDE statement
Erklärung :
Bindet den Inhalt der durch 'mypgm' referenzierten Datei in den SAS-Job ein.
Kopiert!
1%include mypgm;
14 Codeblock
FILENAME statement
Erklärung :
Weist einem Verzeichnis oder einem PDS (Partitioned Data Set) einen Fileref 'mydir' zu, wodurch ein effizienter Zugriff auf mehrere Dateien ermöglicht wird.
Kopiert!
1filename mydir 'directory-or-PDS-name';
15 Codeblock
DATA STEP
Erklärung :
Liest Daten aus der Datei 'qrt1.data' am aggregierten Speicherort, auf den 'mydir' verweist.
Kopiert!
1DATA weight;
2 INFILE mydir(qrt1.DATA);
3 INPUT idno $ week1 week16;
4 loss=week1-week16;
5RUN;
16 Codeblock
DATA STEP
Erklärung :
Schreibt Daten bedingt in die Datei 'awards' am aggregierten Speicherort, auf den 'mydir' verweist.
Kopiert!
1file mydir(awards);
2IF loss ge 5 THEN put idno loss
3 'AWARD STATUS=3';
4 ELSE IF loss ge 10
5 THEN put idno loss 'AWARD STATUS=2';
6 ELSE IF loss ge 15
7 THEN put idno loss 'AWARD STATUS=1';
8RUN;
17 Codeblock
%INCLUDE statement
Erklärung :
Bindet den Inhalt der Datei 'whole.program' ein, die sich am aggregierten Speicherort befindet, auf den 'mydir' verweist.
Kopiert!
1%include mydir(whole.program);
18 Codeblock
DATA STEP
Erklärung :
Liest binäre Daten spaltenweise aus einer angegebenen Datei, wobei die INFILE-Optionen RECFM=F und LRECL=160 verwendet werden.
Kopiert!
1DATA out;
2 INFILE file-specification or path-to-file recfm=f lrecl=160;
3 INPUT var1;
4RUN;
19 Codeblock
DATA STEP / PROC CASUTIL Data
Erklärung :
Dieses Beispiel bereitet zunächst Daten in einer SAS-Arbeitsbibliothek (WORK) vor und verwendet dann PROC CASUTIL, um diese Daten auf den CAS-Server zu laden. Diese Standardmethode erlaubt keine direkte Anwendung der DVR-Optimierung während des Ladevorgangs.
Kopiert!
1/* Préparation des données dans WORK */
2DATA maTableWork;
3 INPUT PatientID $ Week1 Week8 Week16;
4 DATALINES;
5P1 100 95 90
6P2 80 78 75
7P3 120 115 110
8;
9RUN;
10 
11/* Méthode standard - ne permet pas l'optimisation DVR directe */
12PROC CASUTIL;
13 load DATA=maTableWork casout="maTableCAS";
14QUIT;
20 Codeblock
DATA STEP / PROC CAS Data
Erklärung :
Dieses Beispiel erstellt zunächst eine temporäre SAS-Tabelle ('somedata') mit wiederholten Werten. Anschließend wird die UPLOAD-Anweisung von PROC CAS verwendet, um diese Tabelle auf den CAS-Server zu laden, wobei das DVR-Format und VARCHAR-Konvertierungsoptionen direkt angewendet werden. Dies optimiert die Speichernutzung in einem einzigen Schritt. Eine vorherige Bereinigungs- und Überprüfungsschritt ist enthalten.
Kopiert!
1/* Création d'une table temporaire SAS pour l'exemple */
2DATA somedata;
3 LENGTH id $8 name $20 value 8;
4 DO id = 1 to 10;
5 name = cats('Item', id);
6 value = mod(id, 3) * 100;
7 OUTPUT;
8 END;
9 /* Ajout de valeurs répétées pour montrer l'efficacité de DVR */
10 DO id = 11 to 20;
11 name = 'Repeated';
12 value = 50;
13 OUTPUT;
14 END;
15RUN;
16 
17PROC CAS;
18 /* Nettoyage préalable si nécessaire */
19 ACTION TABLE.droptable / name="somedata" caslib="casuser" quiet=true;
20
21 /* Chargement optimisé */
22 upload /
23 /* Récupération dynamique du chemin physique de la table SAS */
24 path="%sysfunc(pathname(work))/somedata.sas7bdat"
25
26 /* Configuration de la table de sortie CAS */
27 casout={
28 caslib="casuser"
29 name="somedata"
30 promote=true, /* Rendre la table globale */
31 memoryformat="DVR", /* Activation de la compression DVR */
32 replication=0 /* Ajuster la réplication selon les besoins */
33 }
34
35 /* Options d'importation supplémentaires */
36 importoptions={
37 filetype="BASESAS",
38 varcharConversion=17 /* Convertit les CHAR > 16 octets en VARCHAR */
39 }
40 ;
41QUIT;
42 
43/* Vérification du format de la table en CAS (optionnel) */
44PROC CASUTIL;
45 list tables caslib="casuser" level="memory";
46QUIT;
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. All Rights Reserved