2016-01-22 64 views
-1

我有一個數據集,患者在治療階段有多個課程。 數據集的樣子:SAS創建標識符

C 1 1 0 
C 0 0 1 
C 1 1 0 
C 0 0 1 

的前兩行:病人開始在ROW1和ROW2結束。這是患者C的第一療程。

第二行:患者C再次從第3行開始,並在第4行結束。

如何使用SAS中的第一個和最後一個語句爲這兩個課程創建標識符。

預期輸出應該如下所示;

C 1 1 0 23 
C 0 0 1 23 
C 1 1 0 24 
C 0 0 1 24 
C 1 1 1 25 

一個課程的計數應該是相同的,並且不同於同一患者的課程。 謝謝。

+0

按組搜索數據步驟。這應該足夠 – RamB

+0

做到了這一點,但兩個課程仍然有相同的編號。它應該有不同的標識符 – Mbe

+1

您的問題很不清楚,如果您添加了預期的輸出以及您迄今爲止已嘗試的內容,將會有所幫助。從您提供的數據中,我看不出如何區分行以確定課程標識 – Longfish

回答

0

假設第三個變量,不管它是什麼,是你的'結束狀態'下面的工作。可能不是最簡單的方法,但希望清楚。我不知道在這種情況下,除了ID切換時,First/Last是否真的有幫助。

想法是查找V3 = 1,然後將標誌設置爲1.如果標誌爲1,則下一個記錄遞增並重置該標誌,並且該過程繼續。保留用於保存行和列之間的標誌和行程值。

data have; 
input ID $ v1-v3; 
cards; 
C 1 1 0 
C 0 0 1 
C 1 1 0 
C 0 0 1 
D 1 0 0 
D 0 1 0 
D 0 0 1 
; 
run; 

data want; 
set have; 

BY ID; 

retain flag 0 course; 

if first.ID then do; 
    Course=1; 
    flag=0; 
end; 

if flag=1 then do; 
    course=course+1; 
    flag=0; 
end; 
else if v3=1 and flag=0 then flag=1; 

run; 

proc print; 
run;