proc sql ; describe ステートメント - データセットの定義内容をログに出力する - SAS
proc sql で使用する describe ステートメントは、データセットの定義内容をログに表示するステートメントです。proc contents のログに表示するバージョンみたいな感じです。
1. describe table テストコード - create table
create table で作成したデータセットに対して、describe ステートメントを使ってみます。
options msglevel=i ; proc sql noprint ; create table TEST1 ( A decimal ,B char(30) ,C varchar(10) ,D numeric ,E float ) ; describe table TEST1 ; quit ;
59 proc sql noprint ; 60 create table TEST1 61 ( 62 A decimal 63 ,B char(30) 64 ,C varchar(10) 65 ,D numeric 66 ,E float 67 ) 68 ; NOTE: テーブルWORK.TEST1(行数0、列数5)が作成されました。 69 describe table TEST1 ; NOTE: SQLテーブルWORK.TEST1は次のように作成されました: create table WORK.TEST1( bufsize=65536 ) ( A num, B char(30), C char(10), D num, E num ); 70 quit ; NOTE: PROCEDURE SQL処理(合計処理時間): 処理時間 0.02 秒 CPU時間 0.03 秒
文字項目はすべて char に、数値項目は num と出力されます。
2. describe table テストコード - dataステップ + label, format, informat
create table だけでなく、data ステップで作成したデータセットに対してもやってみます。
data TEST1 ; label A = "TEST" ; A = 1 ; B = "STR" ; format C 3. ; C = 5 ; format D yymmdds10. ; D = date() ; informat E 3. ; E = 0 ; run ; proc sql ; describe table TEST1 ; quit ;
69 proc sql ; 70 describe table TEST1 ; NOTE: SQLテーブルWORK.TEST1は次のように作成されました: create table WORK.TEST1( bufsize=65536 ) ( A num label='TEST', B char(3), C num format=3., D num format=YYMMDDS10., E num informat=3. ); 71 quit ; NOTE: PROCEDURE SQL処理(合計処理時間): 処理時間 0.01 秒 CPU時間 0.02 秒
まるで、create table で作ったかのように出力されます。format や informat、label の設定も出力されます。
3. describe table テストコード - インデックス + 一貫性制約
インデックスが作成されていたり、一貫性制約(not null や primary key など)が指定されていた場合、その情報も出力されます。
proc sql ; create table TEST1 ( A decimal primary key ,B char(30) not null ,C varchar(10) not null ,D numeric ,E float distinct ) ; create index TEST1_KEY on TEST1(A, B) ; describe table TEST1 ; quit ;
74 proc sql ; 75 create table TEST1 76 ( 77 A decimal primary key 78 ,B char(30) not null 79 ,C varchar(10) not null 80 ,D numeric 81 ,E float distinct 82 ) 83 ; NOTE: テーブルWORK.TEST1(行数0、列数5)が作成されました。 84 create index TEST1_KEY on TEST1(A, B) ; NOTE: 複合インデックスTEST1_KEYが定義されました。 85 describe table TEST1 ; NOTE: SQLテーブルWORK.TEST1は次のように作成されました: create table WORK.TEST1( bufsize=65536 ) ( A num, B char(30), C char(10), D num, E num ); create index TEST1_KEY on WORK.TEST1(A,B); create unique index E on WORK.TEST1(E); create unique index A on WORK.TEST1(A); 86 quit ; NOTE: PROCEDURE SQL処理(合計処理時間): 処理時間 0.08 秒 CPU時間 0.09 秒
一貫性制約があった場合は、リストにも結果が出力されます。
4. describe table constraints テストコード
一貫性制約の有無だけを調べたい時は、describe table constraints を使います。
proc sql ; create table TEST1 ( A decimal primary key ,B num ) ; describe table constraints TEST1 ; create table TEST2 ( A decimal ,B num ) ; describe table constraints TEST2 ; quit ;
62 proc sql ; 63 create table TEST1 64 ( 65 A decimal primary key 66 ,B num 67 ) ; NOTE: テーブルWORK.TEST1(行数0、列数2)が作成されました。 68 describe table constraints TEST1 ; NOTE: SQLテーブルWORK.TEST1 ( bufsize=65536 ) には次の一貫性制約があります : 69 70 create table TEST2 71 ( 72 A decimal 73 ,B num 74 ) ; NOTE: テーブルWORK.TEST2(行数0、列数2)が作成されました。 75 describe table constraints TEST2 ; NOTE: SQLテーブルWORK.TEST2 ( bufsize=65536 ) には、記述する一貫性制約がありません。 76 quit ; NOTE: PROCEDURE SQL処理(合計処理時間): 処理時間 0.08 秒 CPU時間 0.07 秒
5. describe view テストコード - SQLビュー
VIEW がどのように作られているかは、describe view で表示することがきます。
proc sql ; create view V1 as select * from TEST1 ; describe view V1 ; drop view V1 ; quit ;
80 proc sql ; 81 create view V1 as select * from TEST1 ; NOTE: SQLビューは WORK.V1 定義されました。 82 describe view V1 ; NOTE: SQLビュー WORK.V1 は次のように定義されています : select * from TEST1; 83 drop view V1 ; NOTE: ビュー WORK.V1 を削除しました。 84 quit ; NOTE: PROCEDURE SQL処理(合計処理時間): 処理時間 0.01 秒 CPU時間 0.01 秒
6. describe view テストコード - DATA STEPビュー
残念ながら、dataステップで作成したビューは表示できないみたいです。
data TEST_V / view=TEST_V ; set TEST1 ; A = 1 ; run ; proc sql ; describe view TEST_V; quit ;
57 data TEST_V / view=TEST_V ; 58 set TEST1 ; 59 A = 1 ; 60 run ; NOTE: DATA STEPビューをファイルWORK.TEST_Vに保存しました。 NOTE: ストアドDATA STEPビューは異なるオペレーティングシステムでは実行できません。 NOTE: DATAステートメント処理(合計処理時間): 処理時間 0.03 秒 CPU時間 0.02 秒 61 62 proc sql ; 63 describe view TEST_V; WARNING: WORK.TEST_V は SQL ビューではありません。 64 quit ; NOTE: PROCEDURE SQL処理(合計処理時間): 処理時間 0.00 秒 CPU時間 0.01 秒
(2015/09/22 追記)
「 ビューの生成コードを出力するdescribeについて、SQLビューとデータステップビューだと方法が違うから気を付けてって話 | データステップ100万回 SAS新手一生 」にて、DATA STEPビューの定義内容を表示する方法が紹介されていました。 dataステップ内にて、describeステートメントを使うことでできるようです。
data view=TEST_V ; describe ; run ;
68 data view=TEST_V ; 69 describe ; 70 run ; NOTE: DATAステップビューWORK.TEST_Vの定義: data TEST_V / view=TEST_V ; set TEST1 ; A = 1 ; run ; NOTE: DATAステートメント処理(合計処理時間): 処理時間 0.02 秒 CPU時間 0.02 秒
コメント
コメントを投稿