填写sas数据集

时间:2017-05-09 16:40:34

标签: sas

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 .

1 个答案:

答案 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;