Ich bin mit dieser Komprimierungsfunktion in dem Code unten, dass ich versuche zu konvertieren.SAS Datum Makro und komprimieren Funktion
Alter Code: (Dieser Code funktioniert und gibt die folgenden Ergebnisse)
data _null_;
%let startdt='2015/11/1';
date_num=compress(&startdt,"'");
call symputx('date_num',date_num);
%put &startdt;
%put &date_num;
run;
Dieser Code gibt Werte für den Makrovariable STARTDT als 2015.11.01 und datenum- als 2015.11.01.
Ich versuche, ähnliche Funktionalität mit Makrovariablen für Daten zu erreichen.
Neuer Code: (Dieser Code ist mir ein Fehler und ich bin nicht in der Lage, um herauszufinden, warum)
data _null_;
dt = date();
last_mth_beg = intnx('month',dt,-1,'beginning');
call symput('startdt',put(last_mth_beg,YYMMDDS10.));
date_num=compress(&startdt,"'");
call symputx('date_num',date_num);
%put &startdt;
%put &date_num;
run;
ich eine Störung erhalte, wenn ich diesen neuen Code ausführen. Ich möchte Ergebnisse wie im alten Code erhalten. Bitte helfen. Vielen Dank!
Bewegen Sie '% LET' und '% PUT'-Anweisungen entweder vor oder nach dem Datenschritt, da SAS sie dann auswertet, erleichtert dies das Lesen und Verstehen Ihres Codes. Wenn Sie sie in der Mitte des Datenschritts belassen, sieht es so aus, als ob sie ausgewertet werden, während der Datenschritt ausgeführt wird, was nicht der Fall ist. Behebt das dein Problem? – Tom
Hallo, das löst das Problem nicht. Der Fehler liegt im "neuen Code", der keine let-Anweisung enthält. Vielen Dank! – PJay
Ihr zweiter Datenschritt sollte ebenfalls gut laufen, aber Sie müssen die '% PUT'-Anweisungen nach der' run; '-Anweisung verschieben.Andernfalls werden sie einen Fehler erzeugen, dass die Makrovariablen nicht existieren, oder, was noch schlimmer ist, sie zeigen die Werte, die sie hatten, BEVOR der Datenschritt lief. – Tom