Использование first.variable и last.variables с переменными аккумулятора - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь понять, что делает эта программа.

data a;
set b (keep=c d);
by c;
if first.c then e=0;
e+d;
if last.c;
run;

Меня смущает следующее.

1), когда нет ТОГДА заявлений, что делает и заявление IF?

2), Когда не оценивается значение, что делает оператор IF? (почему бы не сказать что-то вроде if first.c = 1?)

3), Насколько я понимаю, e является переменной-аккумулятором, начинающейся с 0, и d добавляется путем итерации. Но по какой-то причине e представляет сумму для всех значений c, а не d, хотя мы добавляем d.

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

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Без предложения THEN оператор IF является оператором поднабора. По существу, если условие не выполняется, текущая итерация шага данных останавливается, и элемент управления возвращается наверх, чтобы обработать следующее наблюдение.

SAS оценивает любое значение, которое не равно нулю или отсутствует как истинное. Автомат FIRST. и ПОСЛЕДНЕЕ. переменные, сгенерированные при использовании инструкции BY, будут иметь значения 1 (true) или 0 (false). Первый. переменная будет истинна при первом наблюдении для группы BY и LAST. переменная будет истинна при последнем наблюдении для группы BY.

Ваш шаг данных получает сумму значений D для каждого значения C.

0 голосов
/ 14 ноября 2018

В SAS есть два разных оператора if - if-then-else и подмножество if. У них похожий синтаксис, но они делают разные вещи. У вас есть один из каждого в вашем коде.

Вот как это объясняется в документации :

Оператор IF поднабора эквивалентен этому оператору IF-THEN:

если нет (выражение), то удалить;

...