Вы можете использовать функцию LAG в SAS для получения запаздывающих значений некоторой переменной.
Эта функция использует следующий базовый синтаксис:
lag1_value = lag (value);
По умолчанию задержка находит предыдущее значение некоторой переменной.
Однако вы можете использовать lag2 , lag3 , lagn и т. д. для вычисления 2-лаговых, 3-лаговых, n-лаговых и т. д. значений некоторой переменной.
В следующих примерах показано, как использовать функцию запаздывания на практике.
Пример 1: вычисленные лаговые значения для некоторой переменной
Предположим, у нас есть следующий набор данных в SAS, который показывает общий объем продаж, совершенных некоторым магазином в последовательные дни:
/\*create dataset\*/
data original_data;
input day $ sales;
datalines ;
1 14
2 19
3 22
4 20
5 16
6 26
7 40
8 43
9 29
10 30
11 35
12 33
;
run ;
/\*view dataset\*/
proc print data =my_data;

В следующем коде показано, как рассчитать значение продаж с отставанием на 1, 2 и 3 дня:
/\*create new dataset that shows lagged values of sales\*/
data new_data;
set original_data;
lag1_sales = lag(sales);
lag2_sales = lag2(sales);
lag3_sales = lag3(sales);
run ;
/\*view new dataset\*/
proc print data =new_data;

Три новых столбца (lag1_sales, lag2_sales, lag3_sales) показывают продажи с задержкой на один, два и три дня соответственно.
Пример 2. Расчет лаговых значений по группам
Предположим, у нас есть следующий набор данных в SAS, который показывает общий объем продаж двух магазинов в течение последовательных дней:
/\*create dataset\*/
data original_data;
input store $ sales;
datalines ;
A 14
A 19
A 22
A 20
A 16
A 26
B 40
B 43
B 29
B 30
B 35
B 33
;
run ;
/\*view dataset\*/
proc print data =original_data;

Мы можем использовать следующий код для расчета значений продаж с задержкой на 1 день по магазинам:
/\*create new dataset that shows lagged values of sales by store\*/
data new_data;
set original_data;
by store;
lag1_sales = lag(sales);
if first.store then lag1_sales = .;
run ;
/\*view new dataset\*/
proc print data =new_data;

Значения в столбце lag1_sales показывают значения продаж с задержкой за 1 день для каждого магазина.
Обратите внимание, что значение для lag1_sales в строке 7 пусто, поскольку значение с задержкой на 1 день для этой строки представляет собой значение продаж для другого магазина.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в SAS:
Как нормализовать данные в SAS
Как удалить дубликаты в SAS
Как заменить пропущенные значения нулем в SAS