LesezeichenAbonnierenRSS-Feed abonnieren
Berlebeck22
Returning User | Level 2

Hallo, ich habe folgendes Problem:

 

Aus einer Makrovariable (=201604) würde ich gerne eine weitere Makrovariable generieren, die automatisch den Tag der Monatsmitte berechnet. Leider komm ich da momentan (trotz einigen Versuchen) nicht weiter, hat vielleicht hier jemand eine Idee dazu?!?

 

Hier mein entsprechender Code:


%let mon = 201604;

%let Monatsmitte = intnx('month', input(put(&mon.,6.), yymmn6.), 0,'m');
%put &monatsmitte.;

 

 

Danke schonmal vorab und schöne Grüße!

3 ANTWORTEN 3
BrunoMueller
SAS Super FREQ

Guten Morgen

 

Damit man DATA Step Funktionen in der Makrosprache verwenden kann braucht es die %SYSFUNC Makro Funktion. Da die Makrosprache keine Variablentypen kennt, braucht es keine Hochkomma um Characterkonstanten. Die PUT und INPUT Funktionen werden nicht in %SYSFUNC unterstützt, aber es gibt die entsprechenden PUTC/N und INPUTC/N Funktionen.

 

Das Programm kann so aussehen:

 

%let mon = 201604;

%let Monatsmitte = %sysfunc(intnx(month, %sysfunc(inputn(&mon.,yymmn6.)), 0, M));
%put NOTE: SAS Datumswert als Zahl=&monatsmitte.;
%put NOTE: formattiert=%sysfunc(putn(&Monatsmitte, date9.));

Bruno

Berlebeck22
Returning User | Level 2
Super, vielen lieben Dank!!!
Kurt_Bremser
Super User

Wenn man in einem %let eine Base SAS Funktion verwendet, dann wird die Teil des Textes in der Makrovariablen; sie wird NICHT ausgeführt.

Erst wenn man die Makrovariable in einem DATA Step verwendet, kommt es nach der Code-Ersetzung und dem Compile des DATA Step zur Ausführung der Funktion.

Um eine Base SAS Funktion in einem %let sinnvoll zu verwenden, muss man sie in %sysfunc "einpacken". Da das oft unübersichtlich wird, ist man mM besser dran, einen DATA _NULL_ mit CALL SYMPUT zu verwenden:

%let mon=201604;

data _null_;
monatsmitte = intnx('month',input("&mon.01",yymmdd8.),0,'m');
call symput('monatsmitte',put(monatsmitte,yymmddn8.));
run;

%put &monatsmitte.;

 

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
  • 3 Antworten
  • 1044 Aufrufe
  • 1 Kudo
  • 3 in Unterhaltung