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】FREQプロシージャは頻度集計とクロス集計をする

今回はFREQプロシージャについて解説します。 /* freq 頻度集計 */ data data1; 番号=”AAAAAA”; コード=”02″; 金額=1999; output; 番号=”AAAA …

【SAS】STOPステートメントは処理を切り上げる。

今回はSTOPステートメントについて解説していきます。 /* stop1 */ data data1; id1=”1111″; id2=”1111″; id3=”1111″; output; stop …

【SAS】DROPで良く問われる文法【SAS Base Programming対策8】

今回もDROPについて解説します。 (対比:KEEP 【SAS】KEEPはカラムの選択に使える。 | ビジネスイッチ (how-to-business.com)) 過去記事ではDROPの使い方について …

【SAS】INDEXC関数は文字列から特定の文字を探して位置を返す。

今回はINDEXC関数について解説します。 data data1; Id1=”1111″; Id2=”1111″; Id3=”1111″; output; Id1=”2111″; Id2=”2111″ …

【SAS】%MACROはマクロを定義することができる。その5 =を使うと数を渡す引数,数を受け取る引数を指定できる。【%MEND】

今回はマクロ引数に「=」を用いる方法について解説していきたいと思います。(事前に読んでおきたい記事:【SAS】%MACROはマクロを定義することができる。その3 マクロには引数を設定できる。【%MEN …