2012-10-12 84 views
0

我的數據集:使用選擇的記錄組FIRST.var

ID  AGE 

1  65 
1  66 
1  67 
1  68 
1  69 
1  70 
1  71 
2  70 
2  71 
2  72 
3  68 
3  69 
3  70 

[...] 

我的(基本)的問題是:這是獲得與開始65 <= AGE <= 68 ID記錄的數據集的最直接的方法是什麼? (在上面的例子中,我想獲得前7行和後3個)。謝謝!

回答

1
data input_dataset; 
input ID  AGE; 
cards; 
1  65 
1  66 
1  67 
1  68 
1  69 
1  70 
1  71 
2  70 
2  71 
2  72 
; 
run; 

proc sort data=input_dataset out=sorted; 
by ID; 
run; 

data work.first_age65to68; 
    set sorted; 
    retain keepit 0; 
    by ID; 
    if first.ID then do; 
     if AGE ge 65 and AGE le 68 then keepit=1; 
     else keepit=0; 
    end; 
    if keepit; 
    drop keepit; 
run; 
+0

這正是我所需要的,非常感謝! – Stezzo

2

正好有另一種方法......

proc sql; 
    delete from input_dataset I where not exists 
    (select 1 from input_dataset D where I.id=D.id having 65 le min(age) le 68); 
quit; 

如果你想創建一個新的數據集,相同的基本查詢將工作作爲一個SELECT的一部分,扭轉了NOT。