Изменение окончательного значения столбца в SAS по группам - PullRequest
0 голосов
/ 30 октября 2019

У меня есть следующий набор данных:

Student         TestDayStart        TestDayEnd
001             1                   5
001             6                   10
001             11                  15
002             1                   4
002             5                   9
002             10                  14

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

Student         TestDayStart        TestDayEnd
001             1                   5
001             6                   10
001             11                  15
001             15                  15
002             1                   4
002             5                   9
002             10                  14
002             14                  14

Я не совсем уверен, как я могу сделать это в SAS. Любое понимание будет оценено.

1 Ответ

1 голос
/ 30 октября 2019

После сортировки набора данных вы можете сделать это в шаге данных.

proc sort data=have;
by student testdaystart testdayend;
run;

Теперь вы можете использовать операторы by и retain в шаге данных. Оператор by позволяет найти последнего учащегося, а оператор retain позволяет сохранить предыдущее значение в наборе данных.

data want;
set have;
retain last_testdayend;
by student testdaystart testdayend;
output;
last_testdayend = testdayend;
if last.student then do;
    if testdaystart ne testdayend then do;
        testdaystart = last_testdayend;
        testdayend = last_testdayend;
        output; * this second output statement creates a new record in the dataset;
    end;
end;
drop last_testdayend;
run;
...