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

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

Register now!

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