Во многих случаях можно выбрать любой порядок операторов и опций в процедурах SAS.
Например, что касается порядка операторов, два следующих PRO C FREQ, в которых порядок операторов BY и TABLES пересекаются, эквивалентны:
PROC SORT DATA=SASHELP.CLASS OUT=class;
BY Sex;
RUN;
PROC FREQ DATA=class;
BY Sex;
TABLES Age;
RUN;
PROC FREQ DATA=class;
TABLES Age;
BY Sex;
RUN;
Аналогичным образом, что касается порядка опций, два следующих PRO C PRINT, в которых порядок опций OBS = и FIRSTOBS = перевернуты, эквивалентны:
PROC PRINT DATA=SASHELP.CLASS (FIRSTOBS=2 OBS=5);
RUN;
PROC PRINT DATA=SASHELP.CLASS (OBS=5 FIRSTOBS=2 OBS=5);
RUN;
Но есть некоторые исключения.
Например, что касается порядка опций, среди два следующих PRO C PRINT, в которых расположение параметра NOOBS отличается, второй PRO C PRINT, где параметр NOOBS предшествует скобкам, приводит к ошибке, в то время как первый PRO C PRINT правильный :
PROC PRINT DATA=SASHELP.CLASS (FIRSTOBS=2 OBS=5) NOOBS;
RUN;
PROC PRINT DATA=SASHELP.CLASS NOOBS (FIRSTOBS=2 OBS=5);
RUN;
Аналогично, что касается порядка утверждений, я иногда встречал случаи, когда определенное утверждение должно быть помещено перед другим (и) состоянием мент (ы) - но, к сожалению, я не помню, в какой процедуре (возможно, статистической, для моделей продолжительности или многоуровневой модели).
Хотя вопрос об упорядочении в шагах данных может рассматриваться как совершенно другой вопрос, потому что в шагах данных порядок операторов в большинстве случаев зависит от логики c, способ упорядочения некоторых операторов выглядит отчасти как обычный порядок, как в процедурах; это, например, случай в следующей процедуре слияния, где оператор MERGE должен предшествовать оператору BY; но я полагаю, что SAS мог быть разработан, чтобы понимать эти утверждения в любом порядке:
/* to get a simple example of merge I start with artificially cutting the Class dataset in two parts */
PROC SORT DATA=SASHELP.CLASS OUT=class;
BY Name;
RUN;
DATA sex_and_age;
SET class (KEEP=Name Sex Age);
RUN;
DATA height_and_weight;
SET class (KEEP=Name Height Weight);
RUN;
DATA all_variables;
MERGE sex_and_age height_and_weight;
BY Name;
RUN;
Поскольку я не могу найти такое руководство, мой вопрос: существует ли текст, посвященный вопросу требуемого порядка для заявлений и опций в рамках процедур SAS?