2012-04-06 46 views
-2

シリアルナンバーに関しても同様の質問がありますが、私のケースは少し異なります。 グループ変数に基づいてシリアル番号を割り当てる必要があります。今、私はデータをグループ変数でソートしています。以下のデータは、データセット全体の一部にすぎません。基本的には、以下に示すようにグループごとに固有のシリアル番号を割り当てる "serial_num"変数を作成します。SAS:グループに基づいてシリアル番号を割り当てます

たとえば、グループ= 1の場合、それぞれ固有のシリアル番号があります。グループ= 2の場合、2つの同一のシリアル番号があります。私は皆さんが下のデータを見てパターンを得ることを願っています。

ありがとうございます。

serial_num group 
---------------- 
1   1 
2   1 
.   . 
.   . 
.   . 
7   2 
7   2 
8   2 
8   2 
.   . 
.   . 
.   .  
10   3 
10   3 
10   3 
11   3 
11   3 
11   3 
.   . 
.   . 
.   . 

答えて

3

奇妙な要求ですが、これは単純な古いデータステップを使用したソリューションです。

data output; 
    set input; 
    by group; 
    if first.group or c = group then do; 
     c = 0; 
     serial_num + 1; 
    end; 
    c + 1; 

    drop c; 
run; 
1

IMLを使用する大雑把な解決策。主にあなたがあなたが必要とするパターンに合っているかどうかを確認するために、私はそれを拡張してデータセット入力を可能にするか、または改善することができます。

注:yは生成されたシリアル番号ベクトルです。

proc iml; 
x={1,1,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4}; 
y=j(nrow(x),1,.); 

y[1,1]=1; 
j=1; 
do i=2 to nrow(y); 
    if y[i-x[i,1],1]=j then do; 
     j=j+1; 
     y[i,1]=j; 
    end; 
    else if x[i,1]^=x[i-1,1] then y[i,1]=y[i-1,1]+1; 
    else y[i,1]=y[i-1,1]; 
end; 
print y; 
quit; 
+1

効率を向上させるために、UNIQUE-LOCトリックまたはUNIQUEBY機能を使用できます。たとえば、http://blogs.sas.com/content/iml/2011/11/07/an-efficient-alternative-to-the-unique-loc-technique/ – Rick

+0

@Rick Thanksを参照してください。それは良い読書です。 –

+0

ありがとう!まあ、少し問題があります。 4つの異なるグループ(1〜4)があり、50万以上の観測値を持っています。 – Ken

関連する問題