データの加工に便利なプロシージャ
データの加工に便利なプロシージャのいくつかを紹介します. いろいろありますが,以下のものは,すぐに使うことになるでしょう.
PRINTプロシジャ | (これはすでに紹介済み) |
FORMATプロシジャ? | 独自のフォーマットを作成します |
SUMMARYプロシジャ | データの集計をします |
SORTプロシジャ | オブザベーションの並べ替えをします |
CONTENTSプロシジャ? | データセットの情報を表示します |
TRANSPOSEプロシジャ? | データセットの縦横を入れ替えます |
ヘルプメニュー>SASヘルプとドキュメント>目次>SASプロダクト>BaseSAS>SASプロシージャ>プロシージャ
の中のprint,format,summary,sort,contents,transposeプロシジャ
FORMATプロシジャの例
options nocenter compress=yes; libname mydata "c;\";
data sample; format ID Z3.; informat name $10.; informat sex $1.; informat station $10.; informat expense comma10.; format expense comma10.; input ID name $ sex $ station $ expense; cards; 001 fujita M iidabashi 6,160 002 suzuki F shimokitazawa 13,650 003 takahashi M funabashi 17,800 004 tanaka M yokohama 15,830 ; proc print;run;
proc format; value $sexf /*性別を漢字表記するフォーマットを作成*/ "M"="男" "F"="女" others="不明" ; value expf /*定期代を1万円未満と以上に分類するフォーマットを作成*/ .="不明" 0-<10000="1万円未満" 10000-high="1万円以上" ; run;
proc print; format sex $sexf. expense expf.; /*作成したフォーマットを指定*/ run;
OBS ID name sex station expense 1 001 fujita 男 iidabashi 1万円未満 2 002 suzuki 女 shimokitazawa 1万円以上 3 003 takahashi 男 funabashi 1万円以上 4 004 tanaka 男 yokohama 1万円以上
SORTプロシジャの例
proc sort;by sex expense;run; /*性別順,定期代順に並べ替え*/ proc print;run;
OBS ID name sex station expense
1 002 suzuki F shimokitazawa 13,650 2 001 fujita M iidabashi 6,160 3 004 tanaka M yokohama 15,830 4 003 takahashi M funabashi 17,800
SUMMARYプロシジャの例-レンジ別の度数_freq_が作成
proc summary data=sample nway missing; class sex expense; /*性別,定期代レンジ別に集計*/ output out=sum; format sex $sexf. expense expf.; run;
proc print data=sum;run;
性別,定期代レンジ別の度数_freq_をもつデータセットが生成
OBS sex expense _TYPE_ _FREQ_
1 女 1万円以上 3 1 2 男 1万円未満 3 1 3 男 1万円以上 3 2
SUMMARYプロシジャの例-集計対象と統計量の指定
proc summary data=sample nway missing; class sex; /*性別で集計*/ var expense; /*集計対象は定期代*/ output out=sum mean()=;/*統計量は平均値*/ format sex $sexf.; run;
proc print data=sum;run;
性別の定期代平均をもつデータセットが生成
OBS sex _TYPE_ _FREQ_ expense
1 女 1 1 13,650 2 男 1 3 13,263
CONTENTSプロシジャの例
proc contents data=sample;run;
CONTENTS プロシジャ
データセット名 WORK.SAMPLE オブザベーション数 4 メンバータイプ DATA 変数の数 5 エンジン V9 インデックス数 0 作成日時 2007年04月02日 月曜日 午前02時30分19秒 オブザベーションのバッファ長 37 更新日時 2007年04月02日 月曜日 午前02時30分19秒 削除済みオブザベーション数 0 保護 圧縮済み CHAR データセットタイプ 再利用スペース NO ラベル オブザベーションへのポイント YES データ表現 WINDOWS_32 ソート済み YES エンコード shift-jis Japanese (SJIS)
エンジン/ホスト関連情報
データセットのページサイズ 4096 データセットのページ数 2 データセットの修復数 0 ファイル名 C:\DOCUME~1\kfujita_2\LOCALS~1\Temp\SAS Temporary Files\_TD2300\sample.sas7bdat 作成したリリース 9.0101M3 作成したホスト XP_PRO
変数と属性の昇順リスト
# 変数 タイプ 長さ 出力形式 入力形式
1 ID 数値 8 Z3. 5 expense 数値 8 COMMA10. COMMA10. 2 name 文字 10 $10. 3 sex 文字 1 $1. 4 station 文字 10 $10.
ソート情報
ソート sex expense バリデート済み YES 文字セット ANSI
TRANSPOSEプロシジャの例
proc transpose data=sample out=t; var id expense name sex station; run;
proc print;run;
OBS _NAME_ COL1 COL2 COL3 COL4
1 ID 002 001 004 003 2 expense 13,650 6,160 15,830 17,800 3 name suzuki fujita tanaka takahashi 4 sex F M M M 5 station shimokitazawa iidabash yokohama funabashi
proc sort data=sample;by sex;run;
proc transpose data=sample out=t prefix=name; by sex; id name; var expense; run;
proc print;run;
OBS sex _NAME_ namesuzuki namefujita nametanaka nametakahashi
1 F expense 13,650 . . . 2 M expense . 6,160 15,830 17,800
質問・意見
質問・意見一覧
状態 ↑(1) | サマリ | 投稿者 | ページ名 | [_past] |
---|---|---|---|---|
連続変数のレンジ | anonymous? | SAS入門5/1 | 1227003470 | |
縦横変換 | ふなまさ? | SAS入門5/2 | 1274484274 | |
異常値の検出 | ふなまさ? | SAS入門5/3 | 1305901676 |
以下は、SASのエディタWINDOWでコピペして使えます
/*
データの加工に便利なプロシージャのいくつかを紹介します.
いろいろありますが,以下のものは,すぐに使うことになるでしょう.
printプロシージャ(これはすでに紹介済み)
formatプロシージャ 独自のフォーマットを作成します.
summary データの集計をします.
sort オブザベーションの並べ替えをします.
contents データセットの情報を表示します
transpose データセットの縦横を入れ替えます
ヘルプメニュー>SASヘルプとドキュメント>目次>SASプロダクト>BaseSAS
>SASプロシージャ>プロシージャ
の中のprint,format,summary,sort,contents,transposeプロシージャ
*/
options nocenter compress=yes;
libname mydata "c;\";
data sample;
format ID Z3.;
informat name $10.;
informat sex $1.;
informat station $10.;
informat expense comma10.;
format expense comma10.;
input ID name $ sex $ station $ expense;
cards;
001 fujita M iidabashi 6,160
002 suzuki F shimokitazawa 13,650
003 takahashi M funabashi 17,800
004 tanaka M yokohama 15,830
;
proc print;run;
proc format;
value $sexf /*性別を漢字表記するフォーマットを作成*/
"M"="男"
"F"="女"
others="不明"
;
value expf /*定期代を1万円未満と以上に分類するフォーマットを作成*/
.="不明"
0-<10000="1万円未満"
10000-high="1万円以上"
;
run;
proc print;
format sex $sexf. expense expf.; /*作成したフォーマットを指定*/
run;
/*
OBS ID name sex station expense
1 001 fujita 男 iidabashi 1万円未満
2 002 suzuki 女 shimokitazawa 1万円以上
3 003 takahashi 男 funabashi 1万円以上
4 004 tanaka 男 yokohama 1万円以上
*/
proc sort;by sex expense;run; /*性別順,定期代順に並べ替え*/
proc print;run;
/*
OBS ID name sex station expense
1 002 suzuki F shimokitazawa 13,650
2 001 fujita M iidabashi 6,160
3 004 tanaka M yokohama 15,830
4 003 takahashi M funabashi 17,800
*/
proc summary data=sample nway missing;
class sex expense; /*性別,定期代レンジ別に集計*/
output out=sum;
format sex $sexf. expense expf.;
run;
proc print data=sum;run;
/*
性別,定期代レンジ別の度数_freq_をもつデータセットが生成
OBS sex expense _TYPE_ _FREQ_
1 女 1万円以上 3 1
2 男 1万円未満 3 1
3 男 1万円以上 3 2
*/
proc summary data=sample nway missing;
class sex; /*性別で集計*/
var expense; /*集計対象は定期代*/
output out=sum mean()=;/*統計量は平均値*/
format sex $sexf.;
run;
proc print data=sum;run;
/*
性別の定期代平均をもつデータセットが生成
OBS sex _TYPE_ _FREQ_ expense
1 女 1 1 13,650
2 男 1 3 13,263
*/
proc contents data=sample;run;
/*
CONTENTS プロシジャ
データセット名 WORK.SAMPLE オブザベーション数 4
メンバータイプ DATA 変数の数 5
エンジン V9 インデックス数 0
作成日時 2007年04月02日 月曜日 午前02時30分19秒 オブザベーションのバッファ長 37
更新日時 2007年04月02日 月曜日 午前02時30分19秒 削除済みオブザベーション数 0
保護 圧縮済み CHAR
データセットタイプ 再利用スペース NO
ラベル オブザベーションへのポイント YES
データ表現 WINDOWS_32 ソート済み YES
エンコード shift-jis Japanese (SJIS)
エンジン/ホスト関連情報
データセットのページサイズ 4096
データセットのページ数 2
データセットの修復数 0
ファイル名 C:\DOCUME~1\kfujita_2\LOCALS~1\Temp\SAS Temporary Files\_TD2300\sample.sas7bdat
作成したリリース 9.0101M3
作成したホスト XP_PRO
変数と属性の昇順リスト
# 変数 タイプ 長さ 出力形式 入力形式
1 ID 数値 8 Z3.
5 expense 数値 8 COMMA10. COMMA10.
2 name 文字 10 $10.
3 sex 文字 1 $1.
4 station 文字 10 $10.
ソート情報
ソート sex expense
バリデート済み YES
文字セット ANSI
*/
proc transpose data=sample out=t;
var id expense name sex station;
run;
proc print;run;
/*
OBS _NAME_ COL1 COL2 COL3 COL4
1 ID 002 001 004 003
2 expense 13,650 6,160 15,830 17,800
3 name suzuki fujita tanaka takahashi
4 sex F M M M
5 station shimokitazawa iidabashi yokohama funabashi
*/
proc sort data=sample;by sex;run;
proc transpose data=sample out=t prefix=name;
by sex;
id name;
var expense;
run;
proc print;run;
/*
OBS sex _NAME_ namesuzuki namefujita nametanaka nametakahashi
1 F expense 13,650 . . .
2 M expense . 6,160 15,830 17,800
*/
*****************************************************************
END
*****************************************************************;