SAS - обработка по группам сохраняется с первой и последней точкой - PullRequest
2 голосов
/ 09 июля 2019

Мне всегда приходится быстро обновлять обработку по группам, когда я использую переменные первой и последней точки с данными, но сегодня я увидел кое-что интересное.

Вот пример набора данных:

data DS1;
input ID1 ID2;
datalines;
1 100
1 200
1 300
2 400
3 500
3 500
4 600
;
run;

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

data ByGroup1;
set DS1;
by ID1 ID2;

retain Count;

if first.ID1 then Count = 0;
Count + 1;

run;

Но я читал пост SAS.com, где индивид использовал следующий метод (без оператора сохранения).

data ByGroup2;
set DS1;
by ID1 ID2;

if first.ID1 then Count = 0;
Count + 1;

run;

Оба метода возвращают один и тот же набор данных:

ID1 ID2 Count
1   100 1
1   200 2
1   300 3
2   400 1
3   500 1
3   500 2
4   600 1

Переменные неявно сохраняются в PDV при выполнении групповой обработкой? Или же программа никогда не вернется к началу шага данных, пока не достигнет конца группы?

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

1 Ответ

4 голосов
/ 09 июля 2019

Когда вы используете оператор sum , переменная автоматически сохраняется. И если вы не определили другое начальное значение, оно будет инициализировано нулем.

Синтаксис для заявления суммы:

variable + expression ;
...