National Language Support (NLS)

Aus SAS-Wiki
Wechseln zu: Navigation, Suche

Von Grischa Pfister: Hans-Peter Altenburg, Heinrich Stürzl, Almut Hahn, Carina Ortseifen, Grischa Pfister: Tipps und Tricks für den leichteren Umgang mit der SAS Software, KSFE 2008

An dieser Stelle erfolgt keine vollständige Beschreibung des NLS, sondern es werden nur einige für den täglichen Umgang nützliche Eigenschaften vorgestellt. Eine ausführliche Darstellung findet sich unter [1].

Die Option LOCALE steuert verschiedene sprachabhängige Einstellungen des SAS-Systems. Dazu gehören Seitengrößen, Randeinstellungen und Standardformate. Das ist insbesondere für Datumsformate interessant, da es hier bekanntermaßen international sehr unterschiedliche Formen gibt. Durch Verwendung des NLS und der entsprechenden Formate ist es auf einfache Weise möglich, die eigenen Programme international verfügbar zu machen. Dabei ist zu beachten, dass der Wert für die LOCALE aus zwei Teilen besteht, der Angabe der Sprache plus dem Land - Arabisch wird eben in mehr als einem Land gesprochen. Eine Übersicht der möglichen Lokalen findet sich in [1] ab Seite 397. Typische Zuweisungen sind:

Locale = German_Germany bzw. Locale = de_DE
Locale = French_Canada bzw. Locale = fr_CA

Die Namen der speziell für das NLS entwickelten Formate beginnen mit „nl“, es gibt eine ganze Reihe davon, die vollständige Liste findet sich in [1] ab Seite 63. Das Format „nldate.“ beispielsweise gibt ein formatiertes Datum zurück:

Options locale = de_de;

Data _Null_;
  datum = date();
  Put datum= datum=nldate.;
Run;
Log:
datum=17661 datum=09. Mai 2008

Wird die LOCALE auf „it_IT“ umgestellt, zeigt das LOG

datum=17661 datum=09 maggio 2008

Für das Einlesen von Datumswerten steuert LOCALE die Einstellung der Option DATESTYLE. Hier wird für das Informat angegeben, in welcher Reihenfolge Tag, Monat und Jahr gelesen werden sollen (DATESTYLE = LOCALE). Die Option kann aber auch unabhängig von der Lokalen verwendet werden.

Options
  locale = de_de
  datestyle = locale
;

Data _Null_;
  string = "02/12/31";
  datum = input(string,anydtdte.);
  Put datum= datum=nldate.;
Run;

Das Beispiel liefert als Ergebnis „datum=-10257 datum=02. Dezember 1931“, wird die LOCALE auf „en_US“ gestellt aber „datum=-10550 datum=February 12, 1931“. Über die Option DATESTYLE lässt sich auch innerhalb der gleichen LOCALE die Reihenfolge steuern, um Datumswerte mittels Informat anydtdte. einzulesen.

Tabelle Datum.JPG

(MYD, YDM und DYM ergeben in diesem Beispiel missing values, da das Resultat kein gültiges Datum ist)

Die Funktionen NLDATE(), NLDATM(), und NLTIME() erzeugen eine Zeichenkette, die Datum, Zeit oder beides enthält. Der Trick dabei ist, dass dabei auf eine Vielzahl von Platzhaltern zurückgegriffen werden kann, die für den Monatsnamen, den Tag, die Stunde etc. stehen (und grundsätzlich schon aus PROC FORMAT bekannt sind). Die Sprache, in der Monate, Tage etc. ausgeben werden, wird über die LOCALE erzeugt.

Options locale=de_DE; 

Data _Null_;
  string = nldate(date(),'%A, %d. %B %Y');
  Put string=;
Run;

Das Beispiel liefert als Ergebnis zunächst „string=Freitag, 09. Mai 2008“, wird die LOCALE auf „fr_FR“ umgestellt „string=vendredi, 09. mai 2008“.

Diese Funktion ist natürlich prädestiniert, Zeitstempel jeder Art zu erstellen, z.B. lässt sich das weiter oben gezeigte Makro %Timestamp so wesentlich eleganter kodieren.

Literatur

  • SAS 9.1 National Language Support (NLS) – User’s Guide.