2017-05-09 89 views
-1
Id flag 
1 -1 
1 . 
1 . 
1 . 
1 . 
1 1 
2. -1 
2 . 
2 1 
2 . 

我一直在寻找那个成才分配一个值标志之间的填写空格-1到1之间(可以说0)如果ID是-1相同的,1..or试图切出从点-1到1的数据特定OBJECTID在SAS数据集

输出

Id flag 
1 -1 
1 0 
1 0 
1 0 
1 0 
1 1 
2 -1 
2 0 
2 1 
2 . 
+0

您的问题不清楚。你可以发布你想要的输出吗?你尝试了什么? – Tom

+0

用所需的输出更新了问题 –

+0

那么,您是否在组中的第一条记录之后停止将缺失设置为零?丢失在减号之前出现的值怎么办? – Tom

回答

0

如果你想-1到1之间的输入值,那么你应该尽量保留,你一个新的变量,然后如果前一个值为-1,则分配一个值,如果当前值为1,则停止为其分配一个值。如果您希望在sam中使用这些值e变量,然后根据它们的值将它们写入新变量。

首先我们做一些样本数据。

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; 
+0

谢谢Seba..This是超好玩的!它按照我想要的方式工作! –