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】%SYSFUNC関数はデータステップの外でも関数を使えるようにする。

今回は%SYSFUNC関数について解説します。 /* sysfunc_1 */ %put %sysfunc(substr(123456789, 2, 4)); %sysfuncにより、関数をデータステ …

【SAS】IF文はデータ読み込み後にフィルター、WHERE文はデータ読み込み時にフィルターをする。

今回は、データ入力に着目して、IF文とWHERE文の違いを解説します。 /* if */ data data1; Id1=1111; Char1=”AAAA”; output; Id1=2222; C …

【SAS】SAS日時値から0埋めの時間表記に変換する方法【TOD】【DATETIME】【PUT】

今回はDATETIMEでSAS日時値を取得した後に、TODを使って0埋めの時間表記に変換する方法について解説していきます。 (PUTの形式変換:【SAS】PUT+DATE,YYMMDDはSAS日付値を …

【SAS】【SQL】SQLにおける複数テーブルの結合 その1【UNION ALL】【Snowflake】

今回は複数テーブルの結合について解説します。 /* 複数テーブルの結合_1 */ data data1; Id1=1111; Id2=1111; Id3=1111; output; Id1=2222; …

【SAS】INPUTステートメントは再帰的に型変換ができない。

今回はINPUTステートメントの再帰的な型変換について解説します。 (なお、通常のINPUT型変換の使い方は以下の記事で解説しています。⇒【SAS】INPUTは文字型を数値型に変換する) /*再帰的型 …