目次
構文
PROC CONTENTS DATA = 入力データセット OUT = 出力データセット VARNUM /*入力データセットの変数の並び順でアウトプットする*/ NOPRINT /*アウトプット結果が不要な場合に指定する*/ ; RUN; 使用頻度の高いステートメントやオプションのみ記載
・変数の並び順について、VARNUMを指定してもアウトプット結果のみに反映されるだけで、出力データセットはアルファベット順となる
サンプルデータ
サンプルとして、以下のデータを使用していきます。
data sample;
infile datalines dlm="," dsd missover;
attrib
type length=8. label="タイプ"
type_name length=$200. label="タイプ名"
type_label length=$200. label="タイプラベル"
rank length=8. label="ランキング"
maker length=$200. label="メーカー"
maker_label length=$200. label="メーカーラベル"
uriage length=8. label="売上" format=comma8.
;
input
type
type_name
type_label
rank
maker
maker_label
uriage
;
datalines;
1,Passenger,乗用車,3,HONDA,ホンダ,30000
2,Light,軽自動車,4,NISSAN,ニッサン,50000
2,Light,軽自動車,3,DAIHATSU,ダイハツ,60000
1,Passenger,乗用車,1,TOYOTA,トヨタ,110000
1,Passenger,乗用車,2,NISSAN,ニッサン,40000
2,Light,軽自動車,1,HONDA,ホンダ,110000
2,Light,軽自動車,2,SUZUKI,スズキ,70000
;
run;
使い方
※SAS Studioで実行しているため、BaseSASと出力結果が異なる場合がございます。
変数情報の取得
以下はシンプルな実行例です。
proc contents data = sample
out = sample_contents
;
run;
以下は出力データセットsample_contentsの中身になりますが、変数の数が多いので、折り返して2段で表示しています。
上記の出力変数の内、比較的使用頻度が高いのは、赤枠部分になるかと思います。
変数TYPEは、1=数値変数、2=文字変数、という意味になります。
変数VARNUMは、入力データセットsampleの変数の(左から右への)並び順になります。
以下はアウトプット結果になります。
私の場合は、基本的にアウトプット結果は不要なので、常にNOPRINTオプションを指定しています。
VARNUMオプション
アウトプット結果の変数の並び順を、入力データセットと同じ並び順にしたいときは、VARNUMオプションを指定します。
proc contents data = sample
out = sample_contents_varnum(keep=name type length varnum label format)
varnum
;
run;
以下のアウトプット結果のように、変数の並び順が入力データセットと同じになっています。
VARNUMオプションはアウトプット結果のみに作用するので、出力データセットsample_contents_varnumの並び順はアルファベット順のままになっています。
よく使うマクロ変数化の例
CONTENTSプロシジャは、業務において、CALL SYMPUTXルーチンと組み合わせて、変数情報をマクロ変数化する機会が多いです。
以下はその一例です。
%macro contents_macro(indata);
%put --------------------------------------------------;
%put contents_macro;
%put &=indata;
%put --------------------------------------------------;
/*データの読込*/
proc contents data = &indata.
out = _contents_macro_temp
noprint;
run;
/*変数の並べ替え*/
proc sort data = _contents_macro_temp;
by varnum;
run;
/*グローバルマクロ変数化*/
data _null_;
set _contents_macro_temp;
call symputx("n_vars", _n_, "G");
call symputx(cats("name", _n_), name, "G");
call symputx(cats("type", _n_), type, "G");
call symputx(cats("length", _n_), length, "G");
call symputx(cats("label", _n_), label, "G");
call symputx(cats("format", _n_), format, "G");
run;
%mend contents_macro;
/*展開*/
%contents_macro(sample);
/*チェック*/
%put _global_;
以下はログに出力されるチェック結果です。
上記のように、変数情報がグローバル変数化されています。
変数TYPEをマクロ変数化すると、数値変数のときは△△、文字変数のときは〇〇、のような条件分岐ができるようになります。
業務効率化に興味のある方は、この機会にいろいろお試しください。