2014-07-14 3 views
3

Я пытаюсь начать использовать SAS. Я создаю набор данных, в котором количество переменных зависит от периода, выбранного пользователем. То, что я хочу сделать, это цикл через эти переменные. Макрос Я пытаюсь использовать для этого (я justed фиксированной даты для примера):Функция использования в SAS% do

%MACRO DO_PERIOD; 
    %DO I = 1 %TO %SYSFUNC(intck('month', "01JUL2008"d, "31JUL2009"d)); 
     %PUT %I 
    %END; 
%MEND DO_PERIOD; 

К сожалению запуска этого макроса дает следующее сообщение об ошибке:

ERROR: A character operand was found in the %EVAL function or %IF 
condition where a numeric operand is required. 
The condition was: %sysfunc(intck('month', "01JUL2008"d, "31JUL2009"d)) 
ERROR: The %TO value of the %DO I loop is invalid. 
ERROR: The macro DO_PERIOD will stop executing. 

Я пытался многочисленные способы оценки функция intck (например,% eval (% sysfunc (....)), используя вход (...)), но без каких-либо результатов. Я надеюсь, что кто-то из вас знает ответ на оценку функции в выражении% do.

ответ

4

Несколько вопросов:

  1. В макросъемки, нет необходимости цитировать литералов (например, «месяц») - все это воспринимается как текст.
  2. Вы пропустили точку с запятой в операторе% пут
  3. Вам необходимо амперсанд для обозначения макро переменной (а не знак%, что вызывает макро)

См:

%MACRO DO_PERIOD; 
    %DO I = 1 %TO %SYSFUNC(intck(MONTH, "01JUL2008"d,"31JUL2009"d)); 
    %PUT &I; 
    %END; 
%MEND; 
%DO_PERIOD; 
+0

Большое вам спасибо! Apersand был опечаткой при вводе кода в StackExchange. После некоторых экспериментов я обнаружил, что реальной проблемой были кавычки вокруг «МЕСЯЦА». Оставляя это, решает проблему! –

Смежные вопросы