SEQ(シーケンス)番号を振る

スポンサーリンク
構文(合計ステートメント)

変数 + 式 ;
変数:合計を格納したい変数。
式:加算したい数。

テストデータ

総務省統計局で公開されている各国の人口推移(&予想)のデータより抜粋しました。
もっと抜粋してもよかった。

data raw_data;
   input country $ country_n year population;
 cards;
 Japan 1 1950   84115
 USA   2 1950  158804
 China 3 1950  554419
 Japan 1 1960   94302
 USA   2 1960  186808
 China 3 1960  657686
 Japan 1 1970  104665
 USA   2 1970  209588
 China 3 1970  824788
 Japan 1 1980  117060
 USA   2 1980  229763
 China 3 1980  993877
 Japan 1 1990  123611
 USA   2 1990  252530
 China 3 1990 1172445
 Japan 1 2000  126926
 USA   2 2000  281983
 China 3 2000 1283199
 Japan 1 2010  128057
 USA   2 2010  308641
 China 3 2010 1359755
 Japan 1 2020  125325
 USA   2 2020  331432
 China 3 2020 1424548
 Japan 1 2030  119125
 USA   2 2030  354712
 China 3 2030 1441182
 Japan 1 2040  110919
 USA   2 2040  374069
 China 3 2040 1417473
 Japan 1 2050  101923
 USA   2 2050  389592
 China 3 2050 1364457
 ;
 run;
事前にソート
proc sort data = raw_data out = raw_data_sort;
  by country_n year;
run;
その1(合計ステートメントを使って連番を振る。)
data add_seq;
  set raw_data_sort;
  length seq 8.;

  by country_n;
  if first.country_n then seq = 0;

  seq + 1;
run;

この場合、
seq + 1;

seq = seq + 1;
としてしまうとうまくいきません。他の言語と違って異なる解釈がなされます。

その2(retainステートメントを使って連番を振る。)
data add_seq2;
  set raw_data_sort;
  length seq2 8.;
  retain seq2 0;

  by country_n;
  if first.country_n then seq2 = 0;

  seq2 = sum(seq2, 1);
run;

同じ結果です。

コメント