SAS VIYA Leitfaden

SAS Viya Tutorial: Textdatei ohne Kopfzeile importieren und Spalten dynamisch umbenennen

Simon 23/05/2022 4 views

Beim Importieren von Flatfiles (CSV, TXT) in SAS© Viya über PROC IMPORT ist ein häufiges Szenario problematisch: Die Datendatei enthält keine Kopfzeile, und die Spaltennamen werden separat bereitgestellt (z. B. in einem Word- oder Excel-Dokument).

Standardmäßig generiert SAS© bei Verwendung der Option GETNAMES=NO generische Namen (VAR1, VAR2, VAR3...).

Wie können Sie Ihre eigenen Spaltennamen effektiv anwenden, ohne jede Variable manuell umbenennen zu müssen, insbesondere wenn die Datei Dutzende enthält? Hier sind zwei Ansätze: die schnelle Methode für einige Variablen und die vollständige Automatisierung für große Dateien.

1. Die Standardmethode (PROC IMPORT + RENAME)

Wenn Sie nur wenige Spalten haben, besteht die einfachste Lösung darin, die Datei wie besehen zu importieren und die Variablen später umzubenennen.

Schritt 1: Roher Import

Verwenden Sie die Option GETNAMES=NO, um SAS© mitzuteilen, dass die erste Zeile bereits Daten enthält.

1FILENAME LOC DISK '/workspace/workbench/myorg/data/home/olddatatoimport.txt';
2 
3PROC IMPORT DATAFILE=LOC
4 DBMS=DLM
5 OUT=WORK.NEWDATA
6 REPLACE;
7 DELIMITER=','; /* ou '09'x pour tabulation */
8 GETNAMES=NO; /* Crucial : évite de perdre la 1ère ligne de données */
9RUN;

Schritt 2: Manuelle Umbenennung

Verwenden Sie PROC DATASETS, um Namen zu ändern, ohne alle Daten erneut lesen zu müssen (sehr schnell, auch bei großen Datenmengen).

1PROC DATASETS library=WORK nolist;
2 modify NEWDATA;
3 rename
4 VAR1 = State
5 VAR2 = City
6 VAR3 = Population;
7QUIT;

2. Die automatisierte Methode (Dynamische Umbenennung)

Wenn Sie 50 oder 100 Spalten in einem externen Dokument aufgeführt haben, ist die manuelle Methode mühsam und fehleranfällig. Hier erfahren Sie, wie Sie den Prozess automatisieren, indem Sie die RENAME-Anweisung dynamisch generieren.

Das Konzept

  1. Importieren Sie die Datendatei mit den generischen Namen (VAR1, VAR2...).

  2. Importieren Sie die Liste der Spaltennamen (aus Ihrem Word-/Excel-Dokument kopiert) in eine SAS©-Tabelle.

  3. Verwenden Sie einen Data Step, um eine Makro-Variable zu erstellen, die das Paar VAR1=NeuerName VAR2=AndererName enthält.

  4. Wenden Sie dieses Makro in PROC DATASETS an.

Der vollständige Code

Phase A: Tabelle der Namen erstellen Kopieren Sie Ihre Spaltenliste aus Word und fügen Sie sie in den folgenden Code ein:

1/* Table contenant vos noms de colonnes dans l'ordre du fichier */
2DATA column_names;
3 LENGTH new_name $32;
4 INPUT new_name;
5 DATALINES;
6State
7City
8ZipCode
9Population
10Revenue
11/* ... collez votre liste ici ... */
12;
13RUN;

Phase B: Umbenennungsskript generieren Dieser Code durchläuft die Liste der Namen und erstellt eine Zeichenkette des Typs: VAR1=State VAR2=City ...

1DATA _null_;
2 SET column_names END=last;
3
4 LENGTH rename_list $32000;
5 retain rename_list;
6
7 /* On concatène : "VAR" + numéro de ligne = "Nouveau Nom" */
8 /* cats('VAR', _n_) génère VAR1, VAR2, etc. basée sur le numéro de ligne */
9 rename_list = catx(' ', rename_list, catx('=', cats('VAR',_n_), new_name));
10
11 /* À la fin, on stocke tout dans une variable macro &PAIRES_RENAME */
12 IF last THEN call symputx('PAIRES_RENAME', rename_list);
13RUN;
14 
15/* Vérification dans le journal */
16%put &PAIRES_RENAME;

Phase C: Änderung anwenden

1/* Importation des données brutes */
2PROC IMPORT datafile='/chemin/mon_fichier.txt' dbms=dlm out=work.raw_data replace;
3 getnames=no;
4RUN;
5 
6/* Renommage éclair */
7PROC DATASETS library=work nolist;
8 modify raw_data;
9 rename &PAIRES_RENAME;
10QUIT;

Alternative: Der DATA-Schritt (Volle Kontrolle)

Wenn Ihre Datei komplex ist (spezifische Datumsangaben, besondere numerische Formate), kann PROC IMPORT manchmal Datentypen falsch erraten. In diesem Fall ist die robusteste Methode, einen klassischen DATA-Schritt zu schreiben.

Anstatt SAS© VAR1, VAR2 erraten zu lassen, deklarieren Sie Ihre Variablen direkt:

1DATA work.newdata;
2 INFILE '/workspace/workbench/myorg/data/home/olddatatoimport.txt'
3 dsd /* Gère les délimiteurs et les valeurs manquantes */
4 dlm=',' /* Délimiteur */
5 truncover; /* Évite les erreurs si une ligne est trop courte */
6
7 /* Définissez vos noms et types ici */
8 INPUT
9 State :$2.
10 City :$50.
11 Population :best.
12 Revenue :comma10.;
13RUN;
  • Für einen schnellen Bedarf: PROC IMPORT (GetNames=No) + PROC DATASETS.

  • Für eine große Anzahl von Spalten: Automatisierung über Makro-Variable.

  • Für präzise Typkontrolle: DATA Step mit INPUT.