2016-09-20 11 views
0

こんにちは:私は質問があります。 は、私はこのようなSASデータセットがあります。単一変数の最初のステートメントがSASの場合に使用します。

data a; 
input id $ a b ; 
cards; 
ddd 12 1 
ddd 22 1 
ddd 44 2 
ddd 50 1 
ddd 52 1 
ddd 88 2 
;run; 

をし、私はこのフラグへの最初の場合はOBS湖を使用することができます期待し、この:

、私はIDによってデータセットを並べ替えることを行うために
data a; 
input id $ a b flag $; 
cards; 
ddd 12 1 Y 
ddd 22 1 
ddd 44 2 Y 
ddd 50 1 Y 
ddd 52 1 
ddd 88 2 Y 
;run; 

、a、bとフラグを作成するfirst.bを使用しようとしました。しかし、それはYですべてのobsのフラグです。私は前にbで並べ替える理由かもしれないと思う。しかし、この順序でデータセットを保持するために、私はそれをa、bでソートする必要があります。だから、私の質問は、私はどのように注文を維持し、フラグを作成するfirst.bを使用することができますか?おかげさまで

+1

あなたはそれが動作しない理由を支援したい場合は、あなたのコードを含めます。 – Joe

+0

また、あなたの例では、データセットは 'id ab'によってソートされていますが、' id b'によってソートされているとも言えるでしょう。あなたの大きなデータセットでtrueになるか、別の方法ですか? – Joe

答えて

1

first.bを組み合わせて使用​​しているとします。この場合、理由first.bが機能しないのは、first.bは、の最初の値がのaグループであり、この場合はそれぞれaに1つしかないためです。

この代替案は機能するはずです。以前の値のbを保持し、毎回それをチェックします。

data flagged (drop=prev_b); 
set a; 
retain prev_b; 
if b ne prev_b then flag='Y'; 
output; 
prev_b=b; 
run; 
+0

ありがとうございます。私は同じ論理で最後のobsを得る方法を見つけようとしましたが、まだ手がかりはありません。あなたは同じ論理でそれを適用できると思いますか? – Wayne

1

あなただけのSASは、FIRSTを設定するようにBY文でNOTSORTEDオプションを使用する必要があります。そして最後。それらが欲しいとフラグします。

data want ; 
    set a ; 
    by id b notsorted; 
    flag = first.b ; 
run; 

enter image description here

+0

それは素晴らしく、正確に私が必要なものです。どうもありがとう! – Wayne

関連する問題