dear SAS experts, I use the following code to name datasets and afterwards export files. I encounter the following issue: the name end with a number of blanks (different according to the text of the name) between the name and the .xlsx for instance, like: NAME_variable .xlsx I need names to be: - MONTH_YEAR (if the parameter Spanne is set at 1) - FIRSTMONTH_ENDMONTH_YEAR (if the parameter Spanne is set from 2 to 12). Spanne = number of month reversely to a date (Auswertungsdatum) See below. The code is highly under optimized (I'm quite new to SAS) and I guess there is a way to improve this a lot. Can anyone help and send me advide to use a more clever structure of the code? /* macro-code fuer den Auswertungstag */ %macro auswert; %global Auswertungstag; %let Auswertungstag=%sysfunc(today()); %mend auswert; %auswert; %put &Auswertungstag.; %let Auswertungstag = '01JAN2021'D; /* Zur Nutzung: den Stern löschen und das ausgewählte Datum anpassen*/ %put &Auswertungstag.; %let Spanne=12; /* Hier die Anzahl der gewünschten Monate rückwirkend ab den Vormonat erfassen */ %put &Spanne.; %let Zeitraum_aus_ab = '01APR2019'D; %let Zeitraum_aus_bis = '15APR2019'D; %let NKF_EfDtm = '15SEP2019'D; /* NKFlag_Einfuehrungsdatum: 16 September 2019 */ %put &NKF_EfDtm.; %put &Zeitraum_aus_ab.; %put &Zeitraum_aus_bis.; %macro Monat(Auswertungstag); Monat=month(&Auswertungstag.)-1; if Monat = 0 then Monat = 12; %mend Monat; %macro Jahr1(Auswertungstag); /*Jahr1=(year(&Auswertungstag.)); */ Jahr1=(year(&Auswertungstag.)-1); /* nur für Dezember nutzen */ %mend Jahr1; %macro Jahr2(Auswertungstag); /* Jahr2=(year(&Auswertungstag.)-1); */ Jahr2=(year(&Auswertungstag.)-2); /* nur für Dezember nutzen */ %mend Jahr2; %global Monat Jahr1 Jahr2 Monat1 Monat2 Jahr11 Jahr12 MonatBis MonatAb Spanne Dashboard_Name Dashboard_Name1 Dashboard_Name2 Dashboard_Name3; data zeitraum_Var; Auswertungstag=&Auswertungstag.; Spanne=&Spanne.; format Auswertungstag DDMMYY10. Jahr1 best4. Jahr2 best4. Monat best2. MonatBis best2. MonatAb best2. Spanne best2. Dashboard_Name $31. Dashboard_Name1 $31. Dashboard_Name2 $31. Dashboard_Name3 $31.; length Jahr11 $4 Jahr12 $4 Jahr1 4 Jahr2 4 Monat1 $9 Monat2 $9; %Jahr1(&Auswertungstag.); %Jahr2(&Auswertungstag.); %Monat(&Auswertungstag.); Jahr11=trim(substr(Jahr1,9,4)); Jahr12=trim(substr(Jahr2,9,4)); select (Monat); when (1) Monat1 = 'Januar'; when (2) Monat1 = 'Februar'; when (3) Monat1 = 'März'; when (4) Monat1 = 'April'; when (5) Monat1 = 'Mai'; when (6) Monat1 = 'Juni'; when (7) Monat1 = 'Juli'; when (8) Monat1 = 'August'; when (9) Monat1 = 'September'; when (10) Monat1 = 'Oktober'; when (11) Monat1 = 'November'; when (12) Monat1 = 'Dezember'; otherwise; end; Monat2=trim(Monat1); MonatBis=Monat; MonatAb=Monat-&Spanne.+1; select (MonatAb); when (1) Monat3 = 'Januar'; when (2) Monat3 = 'Februar'; when (3) Monat3 = 'März'; when (4) Monat3 = 'April'; when (5) Monat3 = 'Mai'; when (6) Monat3 = 'Juni'; when (7) Monat3 = 'Juli'; when (8) Monat3 = 'August'; when (9) Monat3 = 'September'; when (10) Monat3 = 'Oktober'; when (11) Monat3 = 'November'; when (12) Monat3 = 'Dezember'; otherwise; end; Jahrdisplay = put(Jahr1,4.); if Spanne = 1 then Dashboard_Name1 = trim(Monat2)||'_'||trim(Jahrdisplay); else Dashboard_Name1 = trim(Monat3)||'_bis_'||trim(Monat2)||'_'||trim(Jahrdisplay); Dashboard_Name=trim(Dashboard_Name1); call symput('Monat', Monat); call symput('Monat1', Monat1); call symput('Monat2', Monat2); call symput('Jahr1', Jahr1); call symput('Jahr2', Jahr2); call symput('Jahr11', Jahr11); call symput('Jahr12', Jahr12); call symput('MonatAb', MonatAb); call symput('MonatBis', MonatBis); call symput('Dashboard_Name', Dashboard_Name); run; /* zu Kontrolle in das LOG schreiben */ %put &Monat.; %put &Monat1.; %put &Monat2.; %put &MonatAb.; %put &MonatBis.; %put &Jahr1.; %put &Jahr2.; %put &Jahr11.; %put &Jahr12.; %put &Dashboard_Name.;
... View more