Я ответил на вопрос SAS несколько минут назад и понял, что существует обобщение, которое может быть более полезным, чем этот (here). Я уже не видел этого вопроса в StackOverflow.Сохранение или удаление группы наблюдений на основе характеристики BY-group
Общий вопрос: как вы можете обрабатывать и хранить всю BY-группу на основе какой-либо характеристики BY-группы, которую вы, возможно, не знаете, пока не просмотрите все наблюдения в группе?
Используя входные данные, аналогичную из предыдущего вопроса:
* For some reason, we are tasked with keeping only observations that
* are in groups of ID_1 and ID_2 that contain at least one obs with
* a VALUE of 0.;
* In the following data, the following ID and ID_2 groups should be
* kept:
* A 2 (2 obs)
* B 1 (3 obs)
* B 3 (2 obs)
* B 4 (1 obs)
* The resulting dataset will have 8 observations.;
data x;
input id $ id_2 value;
datalines;
A 1 1
A 1 1
A 1 1
A 2 0
A 2 1
B 1 0
B 1 1
B 1 3
B 2 1
B 3 0
B 3 0
B 4 0
C 2 4
;
run;
Спасибо и благодаря @Reeza введения меня к петле DoW. – vknowles
К сожалению, пропустили ограничение на редактирование. Во всяком случае, @ user667489, ваш код работает, и я ценю элегантность, но я думаю, что это не самый эффективный. Поскольку спецификации говорят, что мы либо сохраняем, либо отклоняем всю группу, нет необходимости перебирать ** ** набор данных дважды. Вот почему я использовал опцию ** POINT = **, поэтому он только обращается ко второму ** SET **, когда это необходимо. У меня также есть вопрос: Является ли ** SUM (флаг, значение = 0) ** более эффективным, чем оператор ** IF **, и простое присвоение символа от 1 до ** **? – vknowles
Я подозреваю, что вы обнаружите, что дополнительное полное последовательное чтение стоит того же или меньше против случайного доступа через 'point'. 'sum' здесь удобна, так как по умолчанию значения по умолчанию отсутствуют в начале каждой группы. – user667489