Проблема синтаксиса при использовании макроса в SAS

#sas #sas-macro

#sas #sas-макрос

Вопрос:

Я хотел бы написать макрос. Его функция заключается в получении набора данных, разделении набора данных на несколько групп, подсчете размера выборки для каждой группы и, наконец, создании вызова переменной «ind», чтобы указать, является ли размер этой группы большим или нет. (ind = 0 означает маленький, ind = 1 означает большой).

Сначала я написал код вне макроса, который работает хорошо. Я получил идеальный результат без ошибок.

 data stu; input group score; datalines; 
1 700
1 850
1 820
1 640
1 920
1 480
1 460
1 500
2 570
2 580
run;

proc freq data=stu;
table group/out=count;
run;

data count; set count;
if count>=3 then ind=1; else ind=0;
run;

proc print data=count;run;
  

Однако, когда я попытался использовать макрос для реализации этой функции:

 %macro tests(data=, group=);

proc freq data=amp;data;
table amp;group/out=freqn;
run;

data count; set freqn;
%if count>=3 %then ind=1; %else ind=0;
run;

proc print data=count;run;

%mend tests;

%tests(data=stu, group=group);
  

Невозможно сгенерировать набор данных «count», и я также получил сообщение об ошибке:

 ERROR 22-322: Syntax error, expecting one of the following: !, !!, amp;, *,
 **,  , -, /, <, <=, <>, =, >, ><, >=, AND, EQ, GE, GT, LE,
 LT, MAX, MIN, NE, NG, NL, OR, ^=, |, ||, ~=.
  

Как это могло произойти?

Спасибо.

Ответ №1:

Я понял это: внутри if-then statements datastep не должно быть % впереди. Таким образом, код макроса должен быть:

 %macro tests(data=, group=);

proc freq data=amp;data;
table amp;group/out=freqn;
run;

data count; set freqn;
if count>=3 then ind=1; else ind=0;
run;

proc print data=count;run;

%mend tests;

%tests(data=stu, group=group)
  

(надеюсь, это поможет начинающим пользователям SAS, которые также могут совершать глупые ошибки, как я)