В вопросе логика дается не соответствует результат, показанный. Например, во входных данных строка 6 имеет a = y_2 и b не задана, строка 7 имеет c без значения, это означает, что вывод должен иметь b = 0, но на вашем выходе отображается b = 1.
Насколько я понимаю, логика вы хотите либо:
1) В вашей продукции вы хотите б = 1 исходя из условия , если б = 1 или (значение а = значение с в следующей строке)
или
2) в вашей продукции вы хотите б = 1 на основании состояния , если значение а = значение с в следующей строке (игнорируя входное значение б)
Основываясь на этих двух логических сценариев, мои две альтернативные решения использовать данные, которые вы показали, установить следующим образом:
data have;
input @1 a $char3.
@5 b
@7 c $char3.
;
datalines;
x_0 1
x_1 . x_0
x_2 . x_1
x_3 . x_2
y_1 1
y_2 . y_1
y_3 0
z_1 .
;
Решение 1
в вашем выходе, если вы хотите б = 1 исходя из условия , если б = 1 или (значение а = значение с в следующей строке) попробуйте:
data want(drop=c2);
merge have
have(drop=a rename=c=c2 firstobs=2);
b=(b or (a=c2)); /* the brackets are for clarity */
run;
Это дает выход:
Obs a b c
1 x_0 1
2 x_1 1 x_0
3 x_2 1 x_1
4 x_3 1 x_2
5 y_1 1
6 y_2 0 y_1
7 y_3 0
8 z_1 0
Альтернативно
Решение 2
В вашем выходе, если вы хотите б = 1 на основании состояния , если значение a = значение c в следующей строке (игнорируя входное значение b), затем попробуйте:
data want(drop=c2);
merge have
have(drop=a rename=c=c2 firstobs=2);
b=(a=c2); /* the brackets are for clarity */
run;
Это дает выход:
Obs a b c
1 x_0 1
2 x_1 1 x_0
3 x_2 1 x_1
4 x_3 0 x_2
5 y_1 1
6 y_2 0 y_1
7 y_3 0
8 z_1 0
Если ни один из них дают свой желаемый результат, то я предлагаю вам посоветовать, какие строки являются неправильными и то, что логика должна быть, также добавить логическое пояснение к вопрос.
С уважением, Амир.
В выходных строках 15, 16 и 17 столбец c имеет значения h_2_ok, h_3 & z_1_ok, эти значения соответствуют столбцу a в строках 11 (h_2), 15 (h_3) & 10 (z_1) соответственно, поэтому в соответствии с логикой, которую вы дали этим строкам, должно быть b установлено в 1, потому что c «нравится» a. В чем логика, почему b не установлен в 1 для строк 15, 16 и 17? – Amir
Поскольку 15 строк с полем «h_2_ok» и h_2 в 11 строке имеют значение 2, а 16 строк c поле «h_3», а 17 строк c поле «z_1_ok» и 10 строк - «z_1» пусто. Все, что мне нужно, захватить значение 1. –
Я не понимаю логику, возможно, что-то теряется в переводе. – Amir