Datumsberechnung + Ausgabe (Farbe?!)

%let datum = %sysfunc(putn("&sysdate"d,date9));

data main;
  
set quelle;
  test = yrdif(testdatum_1,&
datum.);
run;

frage 1: warum geht das nicht?
ich will praktisch nur die differenz von heute zu dem datum aus der quelldatei berechnen.
Das testdatum_1 dort hat auch das format Date9 bzw. 05JUL2001.

Frage 2:
Wie kann die Datei die ich dann bekomme ausgeben mit der vorgabe, dass alle Zeilen in denen "test" einen wert zb größer als 6 annimmt in einer bestimmten farbe erscheint (ausgabe in einem rtf...). Wahrscheinlich mit proc report ?!

Antwort zu Frage 2

Es geht tatsächlich mit PROC REPORT. Hier ein kleines Beispielprogramm, das aus der Datei SASHELP.CLASS die Differenz des Alters zur Zahl 14 berechnet und alle Zellen rot färbt, bei denen das Ergebnis kleiner als Null ist. Die Datei SASHELP.CLASS ist in jeder Standardinstallation vorhanden.

data main;
   
set sashelp.class;
   agediff=
14-age;
run;

ods rtf file="C:\TEMP\TrafficRTF.rtf";
proc report data=main nowd;
   
column name sex age agediff;

   
define agediff / display;

   
compute agediff;
      
if (agediff < 0) then call define ("agediff", "style", "style={background=red}");
   
endcomp;
run;
ods rtf close;

Gruß
Klaus Landwich

Antwort zu Frage 1

Verwenden Sie die Funktion INPUTN statt PUTN, denn INPUTN macht aus einem alphanumerischen Wert (dem Datum als String) einen numerischen (dem Datum als Ganzzahl). Dann sieht das Ganze zum Beispiel so aus:

%let datum = %sysfunc(inputn("&sysdate"d,date9.));
data _null_;
  testdatum_1 =
'05JUL2001'D;
  test = yrdif(testdatum_1,&
datum.,"ACT/ACT");
  
put test=;
run;
Einfacher geht es aber mit der Funktion TODAY():
data _null_;
  testdatum_1 =
'05JUL2001'D;
  test = yrdif(testdatum_1,today(),
"ACT/ACT");
  
put test=;
run;