LesezeichenAbonnierenRSS-Feed abonnieren
Fay123
Obsidian | Level 7

Hallo zusammen,

 

ich habe ein Problem mit meinem Datum, das als Timesamp vorliegt. Ich müsste aus einem beliebigen Tag eine Zeichenkette formen. Beispiel: 01.10.2015 .... soll umgewandelt werden in Quartal 3 / 2015.

 

Kann mir hier jemand helfen? Vielen Dank im voraus!

5 ANTWORTEN 5
GrischaPfister
Fluorite | Level 6

Hallo Fay123,

 

es gibt verschiedene Möglichkeiten. Die noch relativ neue Funktion nldate() gibt für einen SAS-Datumswert eine Zeichenkette zurück, dabei können verschiedene Platzhalter für Tage, Monate und Quartale verwendet werden. Ansonsten kann der String natürlich über Funktionen und Formate zusammengesetzt werden, hier für beides ein Beispiel:

Options locale = de_DE;

Data _Null_;
  Length datum 8 text $32;
datum = date(); text = nldate(datum,'%Q / %Y'); Put (_all_)(=); text = cat("Quartal ",putn(datum,"qtr1."), " / ", year(datum)); Put (_all_)(=); Run;

Viele Grüße,

 

  Grischa

wmueller
Fluorite | Level 6

Den Zeichenstring würde ich mittels

---8<-----

format datum DDMMYY10.;
datum = input(datum_txt,DDMMYY10.);

--->8-------

konvertieren.

 

Anschließend mit

---8<-----

m = month(datum);

y = year(datum);

--->8-------

die Daten extrahieren und mittels mod(m) das Quartal gewinnen. Evtl. gibt es auch sowas wie quarter(...).

 

Grüße

Wolfgang Müller

 

 

Kurt_Bremser
Super User
datepart() extrahiert das Datum aus einem Timestamp. qtr() liefert das Quartal und year() das Jahr aus einem Datum. Dann muss man die Zahlen nur mehr mit put() in Strings umwwandeln und verketten.
Fay123
Obsidian | Level 7

Vielen Dank an alle! Das hat super geklappt 🙂

BrunoMueller
SAS Super FREQ

Es ist möglich ein eigenes Datumsformat zu erstellen. dies geht mit Proc FORMAT und der PICTURE Anweisung.

 

Hier ein Programmbeispiel, das Format kann direkt auf einen DatumsZeitwert angewendet werden.

 

proc format;
  picture myQtrDate (default=16)
    low - high = 'Quartal %q / %Y' (datatype=datetime)
  ;
run;

data _null_;
  now = datetime();
  putlog now myQtrDate.;
run;

Bruno

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

Diskussionsstatistiken
  • 5 Antworten
  • 3281 Aufrufe
  • 3 Kudos
  • 5 in Unterhaltung