#sas
#sas
Вопрос:
Этот вопрос обсуждался на форуме SAS, и участники, наконец, согласились не согласиться .
Проблема проста: SAS присваивает a missing value
всем переменным во время компиляции UNLESS
, переменная отображается в a sum statement
(в этом случае SAS присваивает значение 0
во время компиляции ) . Вот мое простое доказательство
data test;
put _all_;
var1 1;
var2=5;
put _all_;
run;
Экран журнала
var1=0 var2=. _ERROR_=0 _N_=1
var1=1 var2=5 _ERROR_=0 _N_=1
NOTE: The data set WORK.TEST has 1 observations and 2 variables.
var2
был назначен a missing value
, НО var1
был назначен 0
, потому что он является частью a sum statement
(я так считаю)
Мой вопрос в ТОМ, ПОЧЕМУ? Я был уверен, что SAS присваивает missing values
все переменные при компиляции. Почему это создает исключение для переменной, которая будет отображаться в a sum statement
? Есть ли какие — то другие исключения ?
Ответ №1:
Я бы не назвал это оператором sum.
Утверждение
var1 1;
эквивалентно
retain var1 0;
var1 = var1 1;
Ни оператор ‘long’ sum
var1 = var1 1;
ни
var1 = sum(var1, 1);
само по себе не выполняло бы поведение СОХРАНЕНИЯ или инициализацию до нуля.
Итак, чтобы ответить на вопрос:
инициализация нулем является частью поведения СОХРАНЕНИЯ , неявно запрашиваемого a b;
синтаксисом для переменной a
.
Я не могу думать о других исключениях.
Комментарии:
1. Хорошее объяснение. Также стоит отметить, что местоположение в потоке данных, в который вы фактически помещаете
retain
инструкцию, не влияет на время распознавания инструкции. Таким образом, размещение оператора retain в качестве последней строки кода — это то же самое, что и размещение его в качестве первой строки кода.