構文(合計ステートメント)
変数 + 式 ;
変数:合計を格納したい変数。
式:加算したい数。
テストデータ
総務省統計局で公開されている各国の人口推移(&予想)のデータより抜粋しました。
もっと抜粋してもよかった。
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;
![](https://ymddttm.com/wp-content/uploads/2019/05/2019-05-12_01-711x1024.png)
事前にソート
proc sort data = raw_data out = raw_data_sort; by country_n year; run;
![](https://ymddttm.com/wp-content/uploads/2019/05/2019-05-12_02.png)
その1(合計ステートメントを使って連番を振る。)
data add_seq; set raw_data_sort; length seq 8.; by country_n; if first.country_n then seq = 0; seq + 1; run;
![](https://ymddttm.com/wp-content/uploads/2019/05/2019-05-12_03.png)
この場合、
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;
![](https://ymddttm.com/wp-content/uploads/2019/05/2019-05-12_04.png)
同じ結果です。
コメント