2016-04-14 28 views
1

Yıllar, çeyrekler ve aylar için bugünün tarihinden itibaren belirlenmiş bir aralığı kapsayacak 3 SAS tablosu oluşturmam gerekiyor. Bunu yapmak için daha akıllı bir yol var sanırım, ama (ben geri 5 yıl gitmek gerekiyorsa, diyelim ki) gibi bir şey ile sona erdi:SAS makro döngü tarihi, doğru adımı nasıl belirtebilirsiniz?

Sorun göstermek için nasıl bilmiyorum olmasıdır
%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; 

Döngü bir tarih aralığı olarak bir adım, bu yüzden tam bir sayı ile sona erdi, bu yüzden (yıl - her 4 yılda bir, ay için - her iki ayda bir, çeyrekler için - her 16 çeyrek).

En az birkaç yıl boyunca denemek ve hesaplamak için bir yıl boyunca bir döngü ekledim, ancak çalışmaz. Bu yüzden aylara devam etmeden ve muhtemelen başka bir yuvalanmış döngüyü uygulamadan önce, böyle tablolar oluşturmak için daha kolay bir yol olup olmadığını sormak istedim?

Teşekkürler! :)

+0

Oluşturmak istediğiniz verileri gösterebilir misiniz? Tarih dönemlerini nasıl saklamak istediğinize dair örnekler, yapmaya çalıştığınız şeyi açıklamaya yardımcı olacaktır. Sadece tarih aralıkları oluşturmak istiyorsanız, muhtemelen bir veri adımında bunu yapabilirsiniz ve makro kodu ve SQL'den kaçınabilirsiniz. – Tom

cevap

1

Döngününüzü yıl boyunca değiştirin ve bunun yerine döngü içinde gereken makro değişkenini hesaplayın.

Örnek - Makro olmayan sürüm.

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

     Rest of code; 
End; 
+0

Teşekkürler! Döngüyü yeniden yazdım ve çalışıyor :) '% do i = -1% ila -5% -1; değerleri (% sysfunc (intnx (yıl, ve bugün. & I.))) % '; – Kvadich