2015-09-29 3 views
1

Я пытаюсь рассчитать описательную статистику для пользователя. Макрос принимает параметр «type». Тип - это строка, которая будет использоваться в коде позже.Как вы запрашиваете у пользователя строковый параметр в макросе SAS?

%macro descriptive_stats(data, reqvar, type, filter); 
    proc means data = &data &type$; 
     var &reqvar; 
     by &filter; 
    run; 
%mend descriptive_stats; 


%descriptive_stats(test, &num_var, 'mean', fyear) 

Я получаю следующее сообщение об ошибке:

Syntax error, expecting one of the following: ;, (, ALPHA, CHARTYPE ... 

Я знаю, почему я получаю сообщение об ошибке. Но я не понимаю, почему строка «mean» не заменяется.

ответ

3

Параметры макроса не имеют типов. В макропараметрах нет «числовых» или «символов». Они также не должны иметь котировки вокруг них, если только котировки не нужны в конечном коде. Макропеременные (и параметры) - это просто замена текста - поэтому, если вы введете код ' в код, включите его (или, еще лучше, поместите " вокруг параметра); в противном случае нет.

%macro descriptive_stats(data, reqvar, type, filter); 
    proc means data = &data &type; 
     var &reqvar; 
     by &filter; 
    run; 
%mend descriptive_stats; 


%descriptive_stats(test, &num_var, mean, fyear) 

Я также не уверен, где $ пришли - это не имеет никакого значения в SAS в этом контексте.

+0

Эй, @ Джо! Благодаря! Работает как шарм! –

1

SAS Macro Язык - это в основном сложная копия/вставка. Он касается только строк, что делает цитату очень отличной от data шагов. Когда вы передаете значение 'mean' через свой макрос, он передает с ним кавычки.

Для SAS, он видит:

proc means data = test 'mean'$; 
... 
run; 

что неправильно синтаксис говорить PROC MEANS вычислить только среднее. Вместо этого вы просто хотите передать слово mean без кавычек (или $ sign; нет необходимости в знаке $ PROC MEANS). SAS будет увидеть:

proc means data=test mean; 
... 
run; 

Для получения дополнительной информации о Macro цитировал, проверьте this article.

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