2016-04-14 6 views
1

Ich muss 3 SAS-Tabellen für Jahre, Quartale und Monate erstellen, die einen bestimmten Bereich vom heutigen Datum umfassen würde. Ich denke, es eine intelligentere Art und Weise ist, es zu tun, aber ich am Ende mit so etwas wie (sagen wir, wenn ich 5 Jahre gehen müssen zurück):SAS-Makro-Schleife nach Datum, wie der richtige Schritt angezeigt wird?

%macro asd; 

%let today = %sysfunc(today()); 
%let end_year = %sysfunc(intnx(year,&today,-5)); 


proc sql; 
create table years 
(
Years num informat = date9. format = date9. 
); 

insert into years 

%do i = &today. %to &end_year. %by -365; 
%if i = &today.-365 %then %do; 
values(&i.-1) 
%end; 
%else %do; 
values(&i.) 
%end; 
%end; 
; 
quit; 

%mend asd; 
%asd; 
run; 

Das Problem ist, dass ich weiß nicht, wie zeigen ein Schritt in der Schleife als Datumsperiode, so endete ich mit genauen Zahlen, die variieren (für Jahr - alle 4 Jahre, für Monat - jeden zweiten Monat, für Viertel - alle 16 Quartale).

Ich habe eine Schleife für ein Jahr hinzugefügt, um zu versuchen und mindestens für mehrere Schaltjahre Konto, aber es funktioniert nicht. Also bevor ich zu Monaten übergehe und wahrscheinlich ein anderes geschachteltes Looping implementiere, wollte ich fragen, ob es einen einfacheren Weg gibt, solche Tabellen zu erstellen.

Danke! :)

+0

Können Sie die Daten anzeigen, die Sie generieren möchten? Beispiele, wie Sie die Datumszeiträume speichern möchten, helfen Ihnen zu erklären, was Sie zu tun versuchen. Wenn Sie nur Datumsbereiche generieren möchten, können Sie dies wahrscheinlich in einem Datenschritt tun und Makrocode und SQL vermeiden. – Tom

Antwort

1

Ändern Sie Ihre Schleife zu Schleife über die Anzahl der Jahre und berechnen Sie stattdessen die Makro-Variable in der Schleife benötigt.

Beispiel - Nicht-Makro-Version.

Do I=1 to 5; 
    Year=intnx('year', date, 1); 

     Rest of code; 
End; 
+0

Danke! Ich habe die Schleife umgeschrieben und es funktioniert :) '% do i = -1% bis -5% von -1; Werte (% sysfunc (intnx (Jahr, & heute., & I.))) % end; '. – Kvadich