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

Основываясь на приведенном ниже упрощенном наборе данных, я хотел бы создать новую переменную X3, которая равна 1, если последнее наблюдение by переменная id имеет значение по умолчанию = 1 и если X1 = X2, else X3 = 0.

data example;
    input id default X1 X2;
    cards;
    1 0 0 1
    1 0 0 1
    1 0 1 1
    1 0 0 1
    1 1 0 1
    2 0 0 1
    2 0 1 1
    2 0 0 1
    2 0 0 1
    2 1 0 1
    3 0 0 1
    3 0 1 1
    ;
run;

Новый набор данных должен выглядеть следующим образом:

id default X1 X2 X3;
1 0 0 1 0
1 0 0 1 0
1 0 1 1 1
1 0 0 1 0
1 1 0 1 0
2 0 0 1 0
2 0 1 1 1
2 0 0 1 0
2 0 0 1 0
2 1 0 1 0
3 0 0 1 0
3 0 0 1 0

Я пробовал довольно много вещей и не смог найти никаких решений. Любые предложения будут ценны!


person Econometrics33    schedule 29.05.2017    source источник
comment
У вас есть переменная, которая контролирует порядок? Было бы проще, если бы мы могли изменить порядок, чтобы вы работали с первым значением группы BY, а не с последним значением. Кроме того, пожалуйста, опубликуйте, что вы пробовали до сих пор, в соответствии с правилами StackOverflow. Я отредактирую ваш вопрос, чтобы отформатировать ваши данные, но вы должны сделать это в будущем.   -  person Reeza    schedule 30.05.2017
comment
Для автоматического форматирования кода в SAS для SO выделите код и нажмите TAB. Он будет иметь отступ автоматически, поэтому, когда вы вставите его сюда, он будет правильно отформатирован.   -  person Reeza    schedule 30.05.2017


Ответы (1)


Двойная петля ДОУ – это то, что вам нужно:

data want;
do _n_ = 1 by 1 until (last.ID);
  set example;
  by ID;
  if last.ID and default = 1 then last_default = 1;
  drop last_default;
end;
do _n_ = 1 to _n_;
  set example;
  x3 = x1 = x2 and last_default;
  output;
end;
run;
person user667489    schedule 30.05.2017