0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Snowflake】【SAS】SASの転置構文をSnowflakeに書き換える方法

Last updated at Posted at 2025-05-27

目的

データを転置することができるSASのTRANSPOSEプロシジャを、Snowflakeで書き換える方法をご紹介します。

テストデータ

image.png

今回は上記の縦持ちデータを、以下のように横持ちのデータに変換します。
image.png

TRANSPOSEプロシジャとは

SASのTRANSPOSEプロシジャは、行と列を入れ替える(縦横変換する)処理です。

端的に言うと、以下の通りです。
・行データを列に変換(= ワイド形式への変換)
・または 列データを行に変換(= ロング形式への変換)

SASコード

PROC TRANSPOSE DATA=TEST_A OUT=TEST_B;
BY 商品コード;
ID 店舗名;
VAR 購入日;

SASコード解説

BYステートメントにはグループ分けしたいカラムを、
IDステートメントには横持ち後の列名に指定したいカラムを、
VARステートメントには横持ちにしたいカラムを指定することで、
簡単に転置することができます。

Snowflakeに書き換えるには

上記をSnowflakeで書き換えるには、PIVOTを使います。

PIVOTとは

SnowflakeのPIVOTは、行データを列に変換する機能です。

端的に言うと、以下の通りです。
・カテゴリの値を列に変換して、集計結果を並べる
・クロス集計のようなイメージ

注意点としては、以下の2点が挙げられます。
・FOR job IN (...)で列名として並べるカテゴリを明示すること
・集計関数(例:SUM、COUNTなど)と一緒に使うこと

Snowflakeコード

CREATE OR REPLACE TABLE TEST_B AS
SELECT * FROM TEST_A
PIVOT(SUM("購入日") FOR "店舗名" IN ('A店', 'B店', 'C店'))
AS p()
ORDER BY "商品コード";

Snowflakeコード解説

簡単に説明すると、SASコードでBY、ID、VARそれぞれに指定されているカラムを上記のSnowflakeの構文でそれぞれ以下の対応表に沿って書き換えれば再現可能です。
image.png

まとめ

SASのTRANSPOSEプロシジャは転置を意味します。
これをSnowflakeで書き換えるには、PIVOTを使えば再現可能です。

最後に

本記事ではSASの横持ち構文をSnowflakeで書き換える方法を説明しました。
SASからSnowflakeへコードを書き換える記事はそう多くないと思うので今後もこのような記事を投稿できればと思っております。

関連サイト

宣伝

株式会社ジールはMicrosoft Azure やAWS(Amazon Web Services)、Google Cloud Platform(GCP)、Oracle Cloud Infrastructure(OCI)など、多彩なクラウドプラットフォーム構築・運用の知見を有しています。そのため、複数のクラウドサービスを組み合わせるマルチクラウド環境においても、ベンダーロックインを回避し、お客様のご要望に応じた最適なクラウドプラットフォームの構築・運用への対応が可能です。
https://www.zdh.co.jp/products-services/cloud-data/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?