SAS TRANSPOSE

【SAS】TRANSPOSEは縦持ち、横持ちを変換できる。その2

投稿日:2021年11月12日 更新日:

今回も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;

  • 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;


  • 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;

  • 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;

  • 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;

  • 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;

  • transposeにより、縦持ち横持ちを入れ替えることができる。
  • 横⇒縦持ち時にvarが無いため、文字型は置換されない(?)

-SAS, TRANSPOSE

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

【SAS】WHEREステートメントはIFステートメントと同様に処理条件を設定できる。(分岐)

今回はWHEREステートメントについて解説します。 /* where */ data data1; Id1=1111; Char1=”AAAA”; output; Id1=2222; Char1=”B …

【SAS】COMPRESS関数は文字列の空白を削除し、詰める。(COMPRESS関数 その1)

今回はCOMPRESS関数について解説します。 /* compress */ data data1; Id1=1111; Char1=”AA AA”; output; Id1=2222; Char1= …

【SAS】%MACROはマクロを定義することができる。その4 引数違いの同名マクロは区別できない。【%MEND】

今回は引数違いの同名マクロについて解説していきたいと思います。(事前に読んでおきたい記事:【SAS】%MACROはマクロを定義することができる。その3 マクロには引数を設定できる。【%MEND】 | …

【SAS】SASUSERライブラリの性質について解説

今回はSASUSERライブラリについて解説します。(対比参考:【SAS】WORKライブラリの性質について解説 | ビジネスイッチ (how-to-business.com)) libnameを使わなく …

【SAS】ORDER BYは指定した項目の順番でレコードを並び替える。【SQL】

今回はORDER BYについて解説します。 /* order by_1 */ data data1; Id1=1111; Id2=1111; Id3=1111; output; Id1=2222; I …