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 秒
コメント
コメントを投稿