今回もTRANSPOSEについて解説します。
前回は縦持ち⇒横持ちにする流れで解説してきました。
今回は横持ち ⇒ 縦持ちの流れに沿って解説していきたいと思います。
前回のコードを流用して縦⇒横持ちにした後、もう一度transposeを噛ませることで横⇒縦持ちにしていきます。
/* 正常形 */
data data1;
NO="A"; MONTH="aaaa"; MOJI="AAAA";
output;
NO="A"; MONTH="bbbb"; MOJI="BBBB";
output;
NO="A"; MONTH="cccc"; MOJI="CCCC";
output;
NO="B"; MONTH="dddd"; MOJI="DDDD";
output;
NO="B"; MONTH="eeee"; MOJI="EEEE";
output;
NO="B"; MONTH="ffff"; MOJI="FFFF";
output;
run;
proc transpose data=data1 out=data2; var MOJI; by NO; id MONTH; run;
proc transpose data=data2 out=data3; var aaaa bbbb cccc dddd eeee ffff; by NO; run;
![](https://how-to-business.com/wp-content/uploads/2021/11/61a20e65406ba409849e9eabfc6e384b.png)
![](https://how-to-business.com/wp-content/uploads/2021/11/32a67edaf4b6792bfb96d5a45a3e31cc-1024x429.png)
![](https://how-to-business.com/wp-content/uploads/2021/11/94b4bfd100eb5b66c25c5e26b1e733dc.png)
- transposeにより、縦持ち横持ちを入れ替えることができる。
- 今回は、横持ちのMOJIをNOごとに縦持ちにしている。
- varにより、置換する列を指定できる。
- byにより、グループ単位を指定できる。(A, B)
/* varなし byなし1 */
data data1;
NO="A"; MONTH="aaaa"; MOJI="AAAA";
output;
NO="A"; MONTH="bbbb"; MOJI="BBBB";
output;
NO="A"; MONTH="cccc"; MOJI="CCCC";
output;
NO="B"; MONTH="dddd"; MOJI="DDDD";
output;
NO="B"; MONTH="eeee"; MOJI="EEEE";
output;
NO="B"; MONTH="ffff"; MOJI="FFFF";
output;
run;
proc transpose data=data1 out=data2; var MOJI; by NO; id MONTH; run;
proc transpose data=data2 out=data3; run;
![](https://how-to-business.com/wp-content/uploads/2021/11/bef9b611f02f071f9dfb16cc1b11e661.png)
![](https://how-to-business.com/wp-content/uploads/2021/11/6c5e81c726ad37929fdc71a81f77f05e-1024x232.png)
![](https://how-to-business.com/wp-content/uploads/2021/11/9122a5644a120c5dc57d1383c2abdd3c.png)
- transposeにより、縦持ち横持ちを入れ替えることができる。
- 横⇒縦持ち時にvarが無いため、文字型は置換されない(?)
- byが無いと、_NAME_で同じ値が2回出現した時にエラーとなる(?)
/* varなし byなし2 */
data data1;
NO="A"; MONTH="aaaa"; MOJI="AAAA";
output;
NO="A"; MONTH="bbbb"; MOJI="BBBB";
output;
NO="A"; MONTH="cccc"; MOJI="CCCC";
output;
run;
proc transpose data=data1 out=data2; var MOJI; by NO; id MONTH; run;
proc transpose data=data2 out=data3; run;
![](https://how-to-business.com/wp-content/uploads/2021/11/9057f9ab9f54b36c53504fa7895416d9.png)
![](https://how-to-business.com/wp-content/uploads/2021/11/df30d8f1ccc561dc3d9ad9b9997bd841.png)
![](https://how-to-business.com/wp-content/uploads/2021/11/70fba555927a1c9ac7bb9d74354a0c15.png)
- transposeにより、縦持ち横持ちを入れ替えることができる。
- 横⇒縦持ち時にvarが無いため、文字型は置換されない(?)
/* byなし */
data data1;
NO="A"; MONTH="aaaa"; MOJI="AAAA";
output;
NO="A"; MONTH="bbbb"; MOJI="BBBB";
output;
NO="A"; MONTH="cccc"; MOJI="CCCC";
output;
NO="B"; MONTH="dddd"; MOJI="DDDD";
output;
NO="B"; MONTH="eeee"; MOJI="EEEE";
output;
NO="B"; MONTH="ffff"; MOJI="FFFF";
output;
run;
proc transpose data=data1 out=data2; var MOJI; by NO; id MONTH; run;
proc transpose data=data2 out=data3; var aaaa bbbb cccc dddd eeee ffff; run;
![](https://how-to-business.com/wp-content/uploads/2021/11/da3005ff09e906f3f032ad28172e138b.png)
![](https://how-to-business.com/wp-content/uploads/2021/11/a017251a6975398e7097734d29689512-1024x231.png)
![](https://how-to-business.com/wp-content/uploads/2021/11/ef0c9db2454447806078374ab430784e-1024x334.png)
- transposeにより、縦持ち横持ちを入れ替えることができる。
- varにより、置換する列を指定できる。
- byが無いと、_NAME_で同じ値が2回出現した時にエラーとなる(?)
/* byなし2 */
data data1;
NO="A"; MONTH="aaaa"; MOJI="AAAA";
output;
NO="A"; MONTH="bbbb"; MOJI="BBBB";
output;
NO="A"; MONTH="cccc"; MOJI="CCCC";
output;
run;
proc transpose data=data1 out=data2; var MOJI; by NO; id MONTH; run;
proc transpose data=data2 out=data3; var aaaa bbbb cccc; run;
![](https://how-to-business.com/wp-content/uploads/2021/11/7526f7adaef1f6f977c8336365f71d70.png)
![](https://how-to-business.com/wp-content/uploads/2021/11/6aafbcfe670f490313c7d9f662f67467.png)
![](https://how-to-business.com/wp-content/uploads/2021/11/1effc4020cac9d83b2c1404f083f49cf.png)
- transposeにより、縦持ち横持ちを入れ替えることができる。
- 今回は、横持ちのMOJIをNOごとに縦持ちにしている。
- varにより、置換する列を指定できる。
- byが無いくても、_NAME_で1回出現しただけならエラーにならない(?)
/* byのみ */
data data1;
NO="A"; MONTH="aaaa"; MOJI="AAAA";
output;
NO="A"; MONTH="bbbb"; MOJI="BBBB";
output;
NO="A"; MONTH="cccc"; MOJI="CCCC";
output;
NO="B"; MONTH="dddd"; MOJI="DDDD";
output;
NO="B"; MONTH="eeee"; MOJI="EEEE";
output;
NO="B"; MONTH="ffff"; MOJI="FFFF";
output;
run;
proc transpose data=data1 out=data2; var MOJI; by NO; id MONTH; run;
proc transpose data=data2 out=data3; by NO; run;
![](https://how-to-business.com/wp-content/uploads/2021/11/a5a2cb65e8327a6d84faf238d21e8466-1.png)
![](https://how-to-business.com/wp-content/uploads/2021/11/d942531ae9d7f22bd6e287822bfd1024-1-1024x233.png)
![](https://how-to-business.com/wp-content/uploads/2021/11/2e849716b115ff1ef4555afef3338e83.png)
- transposeにより、縦持ち横持ちを入れ替えることができる。
- 横⇒縦持ち時にvarが無いため、文字型は置換されない(?)