-2

シリアル番号に関して同様の質問があることは知っていますが、私の場合は少し異なります。グループ変数に基づいてシリアル番号を割り当てる必要があります。これで、データがグループ変数でソートされました。次のデータは、データセット全体の一部にすぎません。基本的には、以下のようにグループごとに一意のシリアル番号を割り当てる「serial_num」変数を作成したいと考えています。

たとえば、グループ = 1 の場合、それぞれに固有のシリアル番号があります。group = 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
.           .
.           .
.           .
4

2 に答える 2

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;
于 2012-04-10T12:22:04.547 に答える
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;
于 2012-04-06T22:09:27.050 に答える