今回はSQLのSUMについて解説します。
/* SUM_1 */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
create table data2 AS
select *,SUM(Id1, Id2) AS Id4
from data1;
quit;


- ASにより、SUM(Id1, Id2)の合計値をId4として列にする。
/* SUM_2 */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
create table data2 AS
select *,SUM(Id1, Id2)
from data1;
quit;


- SUM(Id1, Id2)の合計値を_TEMA001として列にする。
/* SUM_3 */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
create table data2 AS
select *,SUM(Id1, 10) AS Id4
from data1;
quit;


- ASにより、SUM(Id1, 10)の合計値をId4として列にする。
- SUM関数には列名だけでなく、数値を入れる事もできる。
/* SUM_4 */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
create table data2 AS
select *,SUM(Id1, a) AS Id4
from data1;
quit;


- ASにより、SUM(Id1, a)の合計値をId4として列にしたい。
- SUM関数の引数に文字列を用いることはできない。
- 「a」は列名として認識されている。
/* SUM_5 */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
create table data2 AS
select *,SUM(Id1, "a") AS Id4
from data1;
quit;


- ASにより、SUM(Id1, “a”)の合計値をId4として列にしたい。
- SUM関数の引数に文字列を用いることはできない。
/* SUM_6 */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
create table data2 AS
select *,SUM(Id1, Id2) AS Id4
from data1
order by Id1,Id2,Id3;
quit;


- ASにより、SUM(Id1, Id2)の合計値をId4として列にする。
- order byにより、Id1,Id2,Id3で昇順に並べ替える。
/* SUM_7 */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
create table data2 AS
select *,SUM(Id1, Id2) AS Id4
from data1
order by Id1,Id2,Id3,Id4;
quit;


- ASにより、SUM(Id1, Id2)の合計値をId4として列にする。
- order byにより、Id1,Id2,Id3,Id4で昇順に並べ替える。
- AS句で出現した列もorder byで指定することができる。
/* SUM_8 */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
create table data2 AS
select *,SUM(Id1, Id2) AS Id4
from data1
group by Id1,Id2,Id3;
quit;



- ASにより、SUM(Id1, Id2)の合計値をId4として列にする。
- group byにより、本来はId1-Id2-Id3で集計時の1グループとする。
- 今回は要約関数を用いていないため、group by句はorder by句に読み替えられている。
/* SUM_9 */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
create table data2 AS
select *,SUM(Id1, Id2) AS Id4
from data1
group by Id1,Id2,Id3,Id4;
quit;



- ASにより、SUM(Id1, Id2)の合計値をId4として列にする。
- group byにより、本来はId1-Id2-Id3-Id4で集計時の1グループとする。
- 今回は要約関数を用いていないため、group by句はorder by句に読み替えられている。