Id flag
1 -1
1 .
1 .
1 .
1 .
1 1
2. -1
2 .
2 1
2 .
我正在寻找一些在-1和1之间分配一个值(假设为0)的东西,如果id对于-1和1是相同的。或者试图将数据从点-1切成1到1特别是客观的
输出
Id flag
1 -1
1 0
1 0
1 0
1 0
1 1
2 -1
2 0
2 1
2 .
答案 0 :(得分:0)
如果您尝试在-1和1之间输入值,那么您应该尝试保留一个新变量,然后在前一个值为-1时分配一个值,如果当前值为1,则停止为其赋值。如果你想在同一个变量中使用它们,那么根据它们的值将它们写入一个新变量。
首先我们制作一些样本数据。
data test;
infile datalines;
input id $1. flag best8.;
datalines;
1 -1
1
1
1
1
1 1
2 -1
2
2 1
2
;
run;
然后是代码。
data result (rename=(new_flag = flag));
set test;
if _n_ = 1 then
cont_flag = .;
prev_flag = lag(flag);
if prev_flag = -1 then
cont_flag = 0;
if flag = 1 then
cont_flag = .;
if cont_flag = 0 then
new_flag = 0;
else if flag = -1 or flag = 1 then
new_flag = flag;
retain cont_flag;
drop flag prev_flag cont_flag;
run;