在sas数据集中的标志之间填充空格

在sas数据集中的标志之间填充空格,sas,Sas,如果-1和1的id相同,我正在寻找在-1和1之间分配值(比如0)的方法。或者尝试为特定objectid从点-1到1切出数据 输出 Id flag 1 -1 1 . 1 . 1 . 1 . 1 1 2. -1 2 . 2 1 2 . 如果试图输入介于-1和1之间的值,则应尝试保留一个新变量,如果以前的值为-1,则为该变量赋值;如果当前值为1,则停止为其赋值。如果你想把它们放在同一个变量中,你可以根据它们的值把它们写到一个新的变量中 首先,我们制作一些样本数据 Id flag 1 -1

如果-1和1的id相同,我正在寻找在-1和1之间分配值(比如0)的方法。或者尝试为特定objectid从点-1到1切出数据

输出

Id flag
1  -1
1  .
1 .
1 .
1 .
1  1
2. -1
2 .
2  1
2 .

如果试图输入介于-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 .
然后是代码

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;

你的问题不清楚。你能发布你想要的输出吗?你尝试了什么?用所需的输出更新了问题。那么,在第一个记录为1的组之后,你是否停止将missing设置为零?那么出现在-1值之前的缺失值呢?我希望0正好在-1和1之间。。。任何高于或低于-1和1的内容对于特定的objectid都应该丢失。我正在尝试为特定id切出一段介于-1和1之间的信息。谢谢Seba..这非常有用!!这正是我想要的方式!!
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;