SAS TRANSPOSE

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

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

今回はTRANSPOSEについて解説します。


/* num char char */
data data1;
  NO=1111; CHAR="A"; MOJI="AAAA";
    output;
  NO=2222; CHAR="B"; MOJI="BBBB";
    output;
  NO=3333; CHAR="C"; MOJI="CCCC";
    output;
  NO=4444; CHAR="D"; MOJI="DDDD";
    output;
  NO=5555; CHAR="E"; MOJI="EEEE";
    output;
  NO=6666; CHAR="F"; MOJI="FFFF";
    output;

run;


proc transpose data=data1 out=data2; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNOを横持ちにしている。
  • 変数名NOは_NAME_,各値はCOL1,COL2…になる。
  • varが無いと、数値型の列で縦横の置換が起こる。

/* char num char */
data data1;
  NO="A"; CHAR=1111; MOJI="AAAA";
    output;
  NO="A"; CHAR=2222; MOJI="BBBB";
    output;
  NO="A"; CHAR=3333; MOJI="CCCC";
    output;
  NO="B"; CHAR=4444; MOJI="DDDD";
    output;
  NO="B"; CHAR=5555; MOJI="EEEE";
    output;
  NO="B"; CHAR=6666; MOJI="FFFF";
    output;

run;


proc transpose data=data1 out=data2; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのCHARを横持ちにしている。
  • 変数名CHARは_NAME_,各値はCOL1,COL2…になる。
  • varが無いと、数値型の列で縦横の置換が起こる。

/* num num char */
data data1;
  NO=1111; CHAR=1111; MOJI="AAAA";
    output;
  NO=2222; CHAR=2222; MOJI="BBBB";
    output;
  NO=3333; CHAR=3333; MOJI="CCCC";
    output;
  NO=4444; CHAR=4444; MOJI="DDDD";
    output;
  NO=5555; CHAR=5555; MOJI="EEEE";
    output;
  NO=6666; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNO,CHARを横持ちにしている。
  • 変数名NO,CHARは_NAME_,各値はCOL1,COL2…になる。
  • varが無いと、数値型の列で縦横の置換が起こる。

/* num char char var有 */
data data1;
  NO=1111; CHAR="A"; MOJI="AAAA";
    output;
  NO=2222; CHAR="B"; MOJI="BBBB";
    output;
  NO=3333; CHAR="C"; MOJI="CCCC";
    output;
  NO=4444; CHAR="D"; MOJI="DDDD";
    output;
  NO=5555; CHAR="E"; MOJI="EEEE";
    output;
  NO=6666; CHAR="F"; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; var NO; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNOを横持ちにしている。
  • 変数名NOは_NAME_,各値はCOL1,COL2…になる。
  • varにより置換する列を指定できる。

/* char num char var有 */
data data1;
  NO="A"; CHAR=1111; MOJI="AAAA";
    output;
  NO="A"; CHAR=2222; MOJI="BBBB";
    output;
  NO="A"; CHAR=3333; MOJI="CCCC";
    output;
  NO="B"; CHAR=4444; MOJI="DDDD";
    output;
  NO="B"; CHAR=5555; MOJI="EEEE";
    output;
  NO="B"; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; var NO; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNOを横持ちにしている。
  • 変数名NOは_NAME_,各値はCOL1,COL2…になる。
  • varにより置換する列を指定できる。
  • varには文字型の変数も指定できる。

/* num num char var有 */
data data1;
  NO=1111; CHAR=1111; MOJI="AAAA";
    output;
  NO=2222; CHAR=2222; MOJI="BBBB";
    output;
  NO=3333; CHAR=3333; MOJI="CCCC";
    output;
  NO=4444; CHAR=4444; MOJI="DDDD";
    output;
  NO=5555; CHAR=5555; MOJI="EEEE";
    output;
  NO=6666; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; var NO; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNOを横持ちにしている。
  • 変数名NOは_NAME_,各値はCOL1,COL2…になる。
  • varにより置換する列を指定できる。
  • varには数値型の変数も指定できる。

/* var複数 */
data data1;
  NO=1111; CHAR="A"; MOJI="AAAA";
    output;
  NO=2222; CHAR="B"; MOJI="BBBB";
    output;
  NO=3333; CHAR="C"; MOJI="CCCC";
    output;
  NO=4444; CHAR="D"; MOJI="DDDD";
    output;
  NO=5555; CHAR="E"; MOJI="EEEE";
    output;
  NO=6666; CHAR="F"; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; var NO CHAR MOJI; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNO,CHAR,MOJIを横持ちにしている。
  • 変数名NO,CHAR,MOJIは_NAME_,各値はCOL1,COL2…になる。
  • varにより置換する列を指定できる。
  • varには複数の変数も指定できる。

/* var by */
data data1;
  NO="A"; CHAR=1111; MOJI="AAAA";
    output;
  NO="A"; CHAR=2222; MOJI="BBBB";
    output;
  NO="A"; CHAR=3333; MOJI="CCCC";
    output;
  NO="B"; CHAR=4444; MOJI="DDDD";
    output;
  NO="B"; CHAR=5555; MOJI="EEEE";
    output;
  NO="B"; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; var MOJI; by NO; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのMOJIをNOごとに横持ちにしている。
  • 変数名MOJIは_NAME_,各値はCOL1,COL2…になる。
  • varにより置換する列を指定できる。
  • byにより、グループ単位を指定できる。(A,B)

/* by var */
data data1;
  NO="A"; CHAR=1111; MOJI="AAAA";
    output;
  NO="A"; CHAR=2222; MOJI="BBBB";
    output;
  NO="A"; CHAR=3333; MOJI="CCCC";
    output;
  NO="B"; CHAR=4444; MOJI="DDDD";
    output;
  NO="B"; CHAR=5555; MOJI="EEEE";
    output;
  NO="B"; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; by NO; var MOJI; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのMOJIをNOごとに横持ちにしている。
  • 変数名MOJIは_NAME_,各値はCOL1,COL2…になる。
  • varにより置換する列を指定できる。
  • byにより、グループ単位を指定できる。(A,B)
  • varとbyを入れ替えても実行できる。

/* by 数値型 */
data data1;
  NO="A"; CHAR=1111; MOJI="AAAA";
    output;
  NO="A"; CHAR=2222; MOJI="BBBB";
    output;
  NO="A"; CHAR=3333; MOJI="CCCC";
    output;
  NO="B"; CHAR=4444; MOJI="DDDD";
    output;
  NO="B"; CHAR=5555; MOJI="EEEE";
    output;
  NO="B"; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; var NO; by CHAR; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNOをCHARごとに横持ちにしている。
  • 変数名NOは_NAME_,値はCOL1になる。
  • varにより置換する列を指定できる。
  • byにより、グループ単位を指定できる。(1111, 2222…)
  • byには数値型の変数も指定できる。

/* varとbyで同じ変数 */
data data1;
  NO="A"; CHAR=1111; MOJI="AAAA";
    output;
  NO="A"; CHAR=2222; MOJI="BBBB";
    output;
  NO="A"; CHAR=3333; MOJI="CCCC";
    output;
  NO="B"; CHAR=4444; MOJI="DDDD";
    output;
  NO="B"; CHAR=5555; MOJI="EEEE";
    output;
  NO="B"; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; var NO; by NO; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNOをNOごとに横持ちにしている。
  • 変数名NOは_NAME_,各値はCOL1,COL2…になる。
  • varにより置換する列を指定できる。
  • byにより、グループ単位を指定できる。(A,B)
  • varとbyで同じ変数を指定しても、置換できる。

/* byのみ */
data data1;
  NO="A"; CHAR=1111; MOJI="AAAA";
    output;
  NO="A"; CHAR=2222; MOJI="BBBB";
    output;
  NO="A"; CHAR=3333; MOJI="CCCC";
    output;
  NO="B"; CHAR=4444; MOJI="DDDD";
    output;
  NO="B"; CHAR=5555; MOJI="EEEE";
    output;
  NO="B"; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; by NO; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのCHARをNOごとに横持ちにしている。
  • 変数名CHARは_NAME_,各値はCOL1,COL2…になる。
  • 数値型の列で縦横の置換が起こる。
  • byにより、グループ単位を指定できる。(A,B)
  • byだけで、varが無くても置換はされる。

/* by 数値型 */
data data1;
  NO="A"; CHAR=1111; MOJI="AAAA";
    output;
  NO="A"; CHAR=2222; MOJI="BBBB";
    output;
  NO="A"; CHAR=3333; MOJI="CCCC";
    output;
  NO="B"; CHAR=4444; MOJI="DDDD";
    output;
  NO="B"; CHAR=5555; MOJI="EEEE";
    output;
  NO="B"; CHAR=6666; MOJI="FFFF";
    output;
run;


proc transpose data=data1 out=data2; by CHAR; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 今回は、置換はされていない。
  • byにより、グループ単位を指定できる。(1111,2222…)
  • 数値型の列がbyで指定されているため、varが無い限りは、置換されない。

/* id */
data data1;
  NO=1111; CHAR=1111; MOJI="AAAA";
    output;
  NO=2222; CHAR=2222; MOJI="BBBB";
    output;
  NO=3333; CHAR=3333; MOJI="CCCC";
    output;
  NO=4444; CHAR=4444; MOJI="DDDD";
    output;
  NO=5555; CHAR=5555; MOJI="EEEE";
    output;
  NO=6666; CHAR=6666; MOJI="FFFF";
    output;
run;

proc transpose data=data1 out=data2; var MOJI; by NO; id CHAR; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのMOJIをNOごとに横持ちにしている。
  • 変数名MOJIは_NAME_,各値は1111,2222…になる。
  • varにより、置換する列を指定できる。
  • byにより、グループ単位を指定できる。(1111,2222…)
  • idにより、横持ちの際にさらにグループ分けできる。

/* idのみ */
data data1;
  NO=1111; CHAR=1111; MOJI="AAAA";
    output;
  NO=2222; CHAR=2222; MOJI="BBBB";
    output;
  NO=3333; CHAR=3333; MOJI="CCCC";
    output;
  NO=4444; CHAR=4444; MOJI="DDDD";
    output;
  NO=5555; CHAR=5555; MOJI="EEEE";
    output;
  NO=6666; CHAR=6666; MOJI="FFFF";
    output;
run;

proc transpose data=data1 out=data2; id CHAR; run;

  • TRANSPOSEにより、縦横を入れ替えることができる。
  • 縦持ちのNOを横持ちにしている。
  • 数値型の列(NO)で縦横の置換が起こる。
  • idだけで、varが無くても置換はされる。
  • 数値型の列(CHAR)がidで指定されているため、残った数値型の列(NO)で置換される。

-SAS, TRANSPOSE

執筆者:


comment

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

関連記事

【SAS】PUTC関数は文字列に対して出力形式を指定して変換する。

今回はPUTC関数について解説します。 /* putc_1 */ proc format; value point “aaaa”=’Low’ “bbbb”=’High’; run; data data …

【SAS】足し算。その3(SUM関数を用いた計算)【of】

今回はSUM関数を用いた足し算で、ofを使った計算について解説します。  (前回はSUM関数を用いた足し算について解説しました。⇒【SAS】足し算。その2(SUM関数を用いた計算) | ビジ …

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

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

【SAS】TITLEステートメントは「結果」にタイトルを付けられる

今回はTITLEステートメントについて解説します。 data data1; 番号=”AAAAAA”; コード=”02″; 金額=1999; output; 番号=”AAAAAA”; コード=”05″; …

【SAS】PUTN関数は数値に対して出力形式を指定して変換する。

今回はPUTN関数について解説します。 /* putn_point. */ proc format; value point 1-50=’Low’ 51-100=’High’; run; data d …