2017-05-09 164 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是超好玩的!它按照我想要的方式工作! –