2015-04-28 5 views
1

Я определил макрос, который получает данные за 1 день. НапримерКак петля макроса sas по дате?

%macro getOneday(stnd_d); 
data _null_; 
    call symputx('numdate',&stnd_d.); 
run; 
data oneday&numdate; 
    set alldata; 
    where stdd = &stnd_d; 
run; 
%mend; 

Теперь я хочу, чтобы цикл, макро от даты начала до даты окончания.

data _null_; 
    do i = '01mar2015'd to '30mar2015'd; 
    %getOneday(stnd_d = i) 
    end; 
run; 

Я не знаю, как передать значение выражения даты в% getOneday() в качестве параметра.

+0

Причина, по которой эта петля не работает, заключается в том, что, как мне кажется, переданный параметр «i» - это просто выражение с номером даты. – raccoonjin

ответ

3

Я надеюсь, вы понимаете, что макрос - getOneday бы просто написать весь код, написанный в нем, в data _null_ заявления, заменив %getOneday и так как вы не можете писать data шаг внутри data шага, его бросает ошибку. Вам просто нужно заменить оператор data _NULL_ на macro, как показано ниже. Также использование такой даты не будет работать, так как Macro будет относиться к ним как char, вам нужно будет преобразовать их в формат date, прежде чем использовать их в цикле %do.

%macro test; 
data _null_; 
date1='01mar2015'd; 
date2='30mar2015'd; 
call symputx("date1",date1); 
call symputx("date2",date2); 
run; 
%put &date1.; 
%put &date2.; 

    %do i = &date1. %to &date2.; 
    %getOneday(stnd_d = &i.) 
    %end; 

%mend; 

%test; 
Смежные вопросы