[別表 4] DATA ステップで使えるステートメント一覧
ステートメント名 役割
ABORT
DATAステップの実行を中断する
ARRAY
変数配列の宣言
asign(割り当て)
変数名=式;の形で指定する。
等号の左辺の変数に右辺の式の値を割り当てる
ATTRIB
1つの変数の属性(タイプ・長さ・フォーマット・
インフォーマット・ラベル)をまとめて宣言する
BY
指定の変数のソート順にオブザベーションが並んでいることを示す。
BYグループ処理を行う場合に必須とな る
CALL
CALLルーティン(複数の戻り値を許す関数)の呼び出し
CARDS
これ以降にカードイメージデータが記述されていることを示す
CARDS4
同 セミコロンや2バイト文字を含むデータを
正しく読み取る場合にCARDSに代えて用いる
CONTINUE
DOループ(DOグループ)処理の中で用い、
ENDステートメントまで強制移動させてDOループ処理にとどまるこ とを指示する
DATA
DATAステップの開始とこのステップで作成する出力データセット名を宣言する
DATALINES
CARDSステートメントの別名
DATALINES4
CARDS4ステートメントの別名
DELETE
現在処理中のオブザベーションの処理を中断(出力データセットに書き込まない)して、
次のオブザベーション の処理に移るためにDATAステップのはじめに戻る
DO
ENDステートメントと対で用い、
条件式に合致した場合の実行範囲をDO~ENDで囲んで指定する。
囲まれた 範囲をDOループまたはDOグループと呼ぶ
DO,
iterative(繰り返し DO)
繰り返しDOステートメントの1つで、
iterativeの部分には 変数名=開始値 TO 終了値 BY 増分値という
DO ループ処理の実行条件指定が入る
DO UNTIL
同 UNTIL(条件式)に指定した条件を満たさない範囲でDOループ処理を実行する
DO WHILE
同 WHILE(条件式)に指定した条件を満たしている範囲でDOループ処理を実行する
DROP
出力データセットに含めない変数を指定する
ELSE
IF~THENステートメントと共に用い、
IF条件に合致しない場合の処理を記述する
END
DOステートメントと対で用い、DOループ処理範囲を指定する
ERROR
強制的にエラーを発生させる
FILE
データ値の出力先(外部ファイル名、リスティング、ログなど)を指定する
FORMAT
指定の変数に出力フォーマットを指定する
GO TO
指定のラベル名が書かれたプログラム位置に次の処理を強制移動させる
IF, Subsetting(サブセット IF)
指定の条件に合致するオブザベーションのみこれ以降の処理に進むことを許可する
IF~THEN
指定の条件に合致する場合の処理を記述する。
条件に合致しない場合の処理は続くELSEステートメントで 記述する
INFILE
外部入力ファイル名を指定する
INFORMAT
指定の変数に入力フォーマットを指定する
INPUT
外部ファイルから指定の変数名の値を指定の入力形式で読み取る
KEEP
出力データセットに含める変数を指定する
LABEL
指定の変数に変数ラベルを定義する
Labels, Statement
ラベル名:(コロン)の指定により、
GO TOやLINKステートメントにより強制移動させるプログラム位置を示す
LEAVE
DOループ(DOグループ)処理の中で用い、
ENDステートメントの次のステートメントまで(ラベルを指定してい た場合はラベル位置まで)
強制移動させてDOループ処理を抜けることを指示する
LENGTH
作成する変数のタイプと長さを定義する。
LINK
指定のラベル名が書かれたプログラム位置からRETURNステートメントまでの範囲に
記述されたサブルーティ ンに処理を強制移動させた後、
移動前の位置に戻るよう指示する
LIST
変数の値をログに書き出す
MERGE
複数のデータセットを横に結合した形でオープンする
OUTPUT
指定の出力データセットに現在処理中のオブザベーションを書き出す
PAGE
改ページを指示する。
DATA
ステッププログラミングによるレポート作成用ステートメント
PUT
外部ファイルやリスティング出力やログへ指定の変数名の値を指定の出力形式で書き出す
PUTLOG
FILEステートメントの指定する書き出し先に無関係に、ログにメッセージを書き出す
RENAME
変数名を変更する
RETAIN
指定の変数値の現在値を次のオブザベーション処理に変わっても
初期化せずに保持するよう宣言する
RETURN
最初のDATAステートメントに処理を戻す。
LINKステートメントからの分岐の場合はLINKの次のステートメント に処理を戻す
RUN
DATAステップの記述の終了を明示的に指定する
SELECT 条件選択のために条件を指定する
SET
データセットを入力のためにオープンする。 複数のデータセットを指定した場合MERGEと異なり縦に結合した イメージでオープンする SKIP ブランク行を書き出す。 DATAステッププログラミングによるレポート作成用ステートメント
STOP DATAステップの処理を中止する
Sum
変数名+式の形で指定する。DATAステップのループ処理中の変数値は右辺の式の値の累積値を値として持 つ
UPDATE
UPDATE Master Transact;の形の指定となり必ずBYステートメントと共に指定する。 Masterデータセットの値 をTransactデータセットの値で更新する場合に用いる
[別表 5] PROC ステップの種類
プロシジャ名 役割
PROC APPEND データセット最後のオブザベーションの後に他のデータセットのオブザベーションを追加する
PROC COMPARE 2つのデータセットの内容を比較する
PROC CONTENTS
データセットのコンテンツ情報(オブザベーション数などの一般属性と変数名や変数タイプなどの変数属性)を 表示したりデータセットに出力する PROC COPY データセットをコピーする
PROC CORR 相関係数を計算する
PROC DATASETS
特定のライブラリに格納されているデータセット名のリストを表示したり、個々のデータセットの名前の変更・削 除などを行う。 また、個々のデータセットに関する属性の表示や編集を行う PROC DELETE 上記DATASETSプロシジャの機能の一部であるデータセットの削除を行う
PROC EXPORT データセットを外部ファイル形式に変換する。 IMPORTプロシジャの逆の操作を行う
PROC FORMAT ユーザー定義フォーマットを作成する
PROC FREQ 度数集計を行う。 n次元クロス集計も可能
PROC IMPORT 特定の形式(CSV形式など)の外部ファイルからデータを読み取りデータセットに変換する
PROC MEANS 変数ごとの基本統計(平均値、標準偏差など)を計算する
PROC OPTIONS オプション設定を変更する
PROC PRINT データセットの値をリスト表示する
PROC PRINTTO リスティング出力の出力先をファイルに変更する
PROC RANK 変数値の順序を計算する
PROC SCORE スコア係数とデータ値の積和によるスコアを計算する
43
PROC SORT オブザベーションを指定の変数値の順に並び替える
PROC SQL SQL言語によるデータ検索・加工を行う
PROC SUMMARY MEANSと同じく変数ごとの基本統計(平均値、標準偏差など)を計算する
PROC TABULATE 度数・平均・百分率を含む多重クロス集計表を作成する
PROC TRANSPOSE データセットを転置(行と列を交換)する
PROC UNIVARIATE 変数ごとの基本統計(平均値、標準偏差など)を計算する。 MEANS,SUMMARYより詳細
[別表 6] グローバルステートメント一覧
ステートメント名 役割
Comment(コメント) *(アスタリスク記号)で始まるステートメント。 任意のコメントを記述できる
ENDSAS WPSセッションを終了する
FILENAME 外部ファイル参照名を定義する
FILENAME_DDE DDE(動的データ交換)機能によるアプリケーションとWPS間のデータ交換を行う
FILENAME_EMAIL WPSからEmailを送る
FOOTNOTE フットノートテキストを定義する
%INC %INCステートメントの省略形
%INCLUDE 外部ファイルに書かれたソースコードを読み込み実行する
LIBNAME データセットライブラリ参照名を定義する
MISSING 数値タイプ変数の入力値に書かれた欠損を表す文字を指定する。
ODS EXCLUDE ODS機能による選択リストの中から除外項目を選ぶ
ODS HTML HTML出力を管理する。 また、どのオブジェクトをHTML出力するかを制御する
ODS LISTING 特定項目のリスティング出力を管理する
ODS OUTPUT 特定項目のデータセット出力を管理する
ODS SELECT ODS機能による選択リストの中から選択項目を選ぶ
ODS SHOW ODS選択リストの表示
ODS TRACE ODS出力に関するメッセージをログに書き出すかどうかを切り替える
OPTIONS 各種オプションの設定を変更する
RUN DATAステップ、PROCステップのステートメントの指定を終了しステップを実行する
TITLE タイトルテキストを定義する
PAGE ログを新しいページに切り替える
SKIP ログにブランク行を1行書いて改行する
X コマンドプロンプトを呼び出す
[別表 7] 演算子一覧 分類 シンボル 別表記 意味 例 算術 + 足し算 c=a+b - 引き算 d=10-x * 掛け算 y=2*x / 割り算 z=x/y ** 累乗計算 value=2**(x+1) 論理 & AND かつ if (a=1) & (b=10) | OR または if (a=1) | (b=10) ^ NOT 否定 if ^(z=1) 比較 = EQ 等しい if a=b ^= NE 等しくない if a NE b < LT より小さい(未満) if a
GT より大きい(超) if b GT 15*x >= GE 等しいかより大きい(以上) if b>=16*x 符号 + プラス(正の数) y=+1
44
- マイナス(負の数) y=-1 最小 >< 小さい方の値 z=(x>
大きい方の値 H=(x<>y<>z) 文字列検 索 IN いずれかの文字列に一致する if name in ("abc" "de") 文字列連 結 || 左右の文字列をつなぐ z="ABC"||"DEFG"||"HI"
文字列比 較
:
比較演算子と共に用いる。 左右の文字列の長さを短い方に揃 えてから比較する
a="12345"; b="123"; if a=:b (真)
[別表 8] 関数一覧 分類 関数名 意味 例 三角 ARCOS アークコサイン y=arcos(x); ARSIN アークサイン y=arsin(x); ATAN アークタンジェント y=atan(x); COS コサイン y=cos(x); COSH ハイパボリックコサイン y=cosh(x); SIN サイン y=sin(x); SINH ハイパボリックサイン y=sinh(x); TAN タンジェント y=tan(x); TANH ハイパボリックタンジェント y=tanh(x); 数学 ABS 絶対値 y=abs(x); EXP 指数 y=exp(x); LOG 自然対数(底=e) y=log(x); LOG10 常用対数(底=10) y=log10(x); LOG2 2を底とする対数 y=log2(x); MOD 割り算の余りを返す y=mod(x,100); POW 累乗。 **演算子と同じ x=pow(100,2); SIGN 符号を返す s=sign(-156); SQRT 平方根 y=sqrt(x); 数値丸め CEIL 整数値に切り上げ y=ceil(x); FLOOR 整数値に切り捨て y=floor(x);
FUZZ
最も近い整数値との差が1E-12以 内であればその整数値を返す
x=fuzz(x);
INT 整数部分を取り出す x_int=int(x);
ROUND
四捨五入して指定の桁位置に丸め る
x=round(125.321,0.1);
ROUNDZ
四捨五入して指定の桁位置に丸め る、fuzzing処理を行わない
x=roundz(125.321,0.1);
統計 CSS 修正済平方和 x=css(5,10,20,16,0,5); CV 変動係数(%表示) x=cv(5,10,20,16,0,5); KURTOSIS 尖度 x=kurtosis(5,10,20,16,0,5); MAX 最大値 x=max(5,10,20,16,0,5); MEAN 平均値 x=mean(5,10,20,16,0,5); MIN 最小値 x=min(5,10,20,16,0,5); N 非欠損値の数を返す n=n(1,3,.,5,10); NMISS 欠損値の数を返す nmiss=nmiss(1,3,.,5,10); RANGE 範囲 x=range(5,10,20,16,0,5); SKEWNESS 歪度 x=skewness(5,10,20,16,0,5); STD 標準偏差 x=std(5,10,20,16,0,5); SUM 合計 x=std(5,10,20,16,0,5); USS 修正前平方和 x=uss(5,10,20,16,0,5); VAR 不偏分散 x=var(5,10,20,16,0,5); 配列 DIM 配列の要素数を返す do i=1 to dim(z);
HBOUND
定義された配列の最後の要素の参 照番号を返す
do i=lbound(arrayname) to hbound(arrayname);
LBOUND 定義された配列の最初の要素の参 do i=lbound(arrayname) to hbound(arrayname);
45
照番号を返す
日付と時間 DATE
今日の日付を返す(1960年1月1日 を起点とした経過日数)、TODAYと 同じ
today=date();
DATEJUL
ユリウス暦表示)から標準の日付値 に変換
d=datejul(2008366);
DATEPART 日時値から日付値部分を取り出す date=datepart("01JAN2008:12:10:00"DT);
DATETIME
現在の日時値を返す(1960年1月1 日を起点とした経過秒数)
now=datetime();
DAY
日付値または日時値から日部分を 取り出す
day=day("10AUG2008"D);
DHMS 日付、時、分、秒から日時値を作成 val=dhms("10AUG2008"D,12,10,30); HMS 時、分、秒から時間値を作成 time=hms(12,0,0);
HOUR
時間値または日時値から時間部分 を取り出す
h=hour("01JAN2008:12:10:00"DT);
INTCK
開始時点から終了時点までの経過 時間をさまざまな時間単位で計算
keika_month=intck("month","10JAN2008"D,"25AUG2008"D);
INTNX 指定の時間経過後の時点を返す after=intnx("month","10JAN2008"D,3,"END");
JULDATE
日付値を5桁のユリウス暦表現 (yyddd)に変換
juldate=juldate("01JAN2008"D);
JULDATE7
日付値を7桁のユリウス暦表現 (yyyyddd)に変換
juldate=juldate7("01JAN2008"D);
MDY 月、日、年から日付値を作成 date1=mdy(12,31,2007);
MINUTE
時間値または日時値から分部分を 取り出す
m=minute("01JAN2008:12:10:00"DT);
MONTH
日付値または日時値から分部分を 取り出す
month=month("01JAN2008:12:10:00"DT);
QTR
日付値または日時値から四半期部 分を取り出す
qtr=qtr("10AUG2008"D);
SECOND
時間値または日時値から秒部分を 取り出す
s=second("01JAN2008:12:10:00"DT);
TIME 現在の時間値を返す now=time(); TIMEPART 日時値から時間部分を取り出す time=timepart("01JAN2008:12:10:00"DT);
TODAY
今日の日付を返す(1960年1月1日 を起点とした経過日数)、DATEの別 名
today=today();
WEEKDAY
日付値または日時値から曜日を取 り出す
week=weekday("10AUG2008"D);
YEAR
日付値または日時値から年部分を 取り出す
year=year("10AUG2008"D);
YYQ
年、四半期から日付値を作成
yyq=yyq(2008,1); ビット演算
BAND
ビット単位のAND x=band(9Fx,11x);
BLSHIFT
ビット列を左シフトする x=blshift(01x,1);
BNOT
ビット単位のNOT x=bnot(01x);
BOR
ビット単位のOR x=bor(9fx,90x);
BRSHIFT
ビット列を右シフトする x=brshift(01x,31);
BXOR
ビット単位のXOR bxor(01x,55x);
◆マクロ
CALL EXECUTE
DATAステップの中から実行ルーテ ィンを呼び出す
if x=1 then call execute("proc print;run;");
CALL SYMDEL
グローバルマクロ変数を削除 (動作しない)
CALL SYMPUT
DATAステップ変数値をマクロ変数 値に割り当てる
call symput("mvar",char);
SYMGET
マクロ変数値をDATAステップ変数 値に変換
c=symget("c");
文字 BYTE ASCII文字を返す、RANKの逆 char=byte(40x);
COMPBL
連続するブランクを1個に圧縮する char=compbl(a||" "||b);
COMPRESS
指定の文字(デフォルトはブランク) を除外する
char=compress(a||b);
CONTAINS
指定の部分文字列の有無をチェッ クする
check=contains(c,"abc");
INDEX
文字値から指定の文字列の開始位 置を返す
position=index("abcabdefgh","bde");
INDEXC
文字値から指定のいずれかの文字 の開始位置を返す
position=indexc("abcabdefgh","bde");
INDEXW
文字値から指定のワードの開始位 置を返す
position=indexw("abc,abde,fgh","abde",",");
LEFT 文字値を左詰する char=left(" abc "); LENGTH 文字値の長さを返す len=length(compress(x)); LIKE 正規表現のあいまい検索 if like(c1,"_ABC%") then put "OK"; LOWCASE 小文字変換 low=lowcase("ABC"); MAXC ブランクを除く最大の文字値 maxchar=maxc("Z1","ABC"); MINC ブランクを除く最小の文字値 minchar=minc("Z1","ABC");
PROPCASE
特殊文字をデリミタとして語単位に 先頭は大文字化、残りの文字は小 文字化する
c=propcase("new/software@world","/@ ");
RANK
1文字値のシーケンス番号を返す、 BYTEの逆
seq=rank("z");
REPEAT 1文字の繰り返し文字列を作成 char=repeat("z",10); REVERSE 文字値を逆順に並べ替える rev_c=reverse(c); RIGHT 文字値を右詰する char=right(" abc ");
SCAN
区切り文字で区切られたn番目の文 字列を抽出
c=scan("new/software@world",2,"/@ ");
SUBSTR 部分文字列の抽出 c=substr("abcdefg",3,2); TRANSLATE 特定の文字を別の文字に変換する new=translate("abcdefgfcded","150","ceg");
TRANWRD
特定の文字列を別の文字列に変換 する
new=tranwrd("abcdefgfcded","cd","99");
TRIM
文字値の後ろ側のブランクを削除 する
c=trim(a)||trim(b);
TRIMN
欠損値に対して長さ0の文字値を返 す以外はTRIMと同じ
c=trimn(a);
UPCASE 大文字変換 up=upcase("Abc");
VERIFY
文字値が指定の文字のみ含むかど うかをチェック
chk=verify("abcdefgfcded","abcdefg");
乱数
CALL RANCAU
コーシー乱数(シードの詳細制御可 能)
call rancau(seed,x);
CALL RANNOR
正規乱数(シードの詳細制御可能) call rannor(seed,x);
CALL RANUNI 一様乱数(シードの詳細制御可能) call ranuni(seed,x); RANCAU コーシー乱数 x=rancau(seed); RANNOR 正規乱数 x=rannor(seed); RANUNI 一様乱数、UNIFORMと同じ x=ranuni(seed); UNIFORM 一様乱数、RANUNIの別名 x=uniform(seed); データセット操 作 ATTRC 文字型属性の値をとる dslabel=attrc(dsid,"label"): ATTRN 数値型属性の値をとる nobs=attrn(dsid,"nobs"); CLOSE データセットをクローズ dsid=close("work.a");
EXIST
データセットやカタログが存在する かどうかをチェック
rc=exist(work.a,data);
FETCH
オープンしたデータセットのオブザ ベーション読み取りポインタを次の オブザベーションに移動する
rc=fetch(dsid);
FETCHOBS
オープンしたデータセットのオブザ ベーション読み取りポインタを指定 のオブザベーションに移動する
rc=fetchobs(dsid,5,abs);
GETVARC
FETCHされているオブザベーション の文字変数値を読み取る
cval=getvarc(dsid,varnum(dsid,"varc");
GETVARN
FETCHされているオブザベーション の数値変数値を読み取る
xval=getvarn(dsid,varnum(dsid,"varx");
LIBREF
ライブラリ参照名の存在をチェック (値0が返ると存在を意味する)
rc=libref("work");
OPEN
データセットをオープン dsid=open("work.a");
PATHNAME
データライブラリ参照名またはファイ ル参照名の物理パスを返す
path1=pathname("work");
SYSMSG
ファイルアクセス時のエラーメッセー ジまたは警告メッセージを獲得
msg=sysmsg();
VARFMT
変数に定義されているフォーマット 名を返す
fmt=varfmt(dsid,varnum(dsid,"a"));
VARINFMT
変数に定義されているインフォーマ ット名を返す
infmt=varinfmt(dsid,varnum(dsid,"a"));
VARLABEL
変数に定義されているラベル名を 返す
label=varlabel(dsid,varnum(dsid,"a"));
VARLEN
変数に定義されている長さを返す len=varlen(dsid,varnum(dsid,"a"));
VARNAME
変数に定義されている変数名を返 す
name1=varname(dsid,1);
VARNUM
変数名の定義されている番号を返 す
num=varnum(dsid,"a"));
VARTYPE
変数に定義されているタイプを返す
type=vartype(dsid,varnum(dsid,"a"));
その他
CALL SYSTEM
OSコマンドを呼び出す
call system("dir c:\");
CHOOSEC
文字列リストから指定の番号の文 字列を抽出する
a=choosec(2,"abc","de","fgh");
CHOOSEN
数値リストから指定の番号の数値を 抽出する
x=choosen(5,120,35,11,16,280);
DIF
nオブザベーション前の値との差を とる
d2=dif2(x);
GETOPTION
オプション設定値を返す
ls=getoption("linesize");
INPUT
インフォーマットを用いて値を変換
num=input("100",3.);
LAG
nオブザベーション前の値を返す
l2=lag2(x);
MISSING
欠損値かどうかをチェック
if missing(x) then put "MISSING VALUE";
PUT
フォーマットを用いて値を変換
char=put(100,3.);
SLEEP
実行を休止する
sleep=sleep(10,1);
SOUNDEX
英語のみ関係する文字列分類アル ゴリズム
a=soundex("hello");
SOUNDSLIKE 2つの文字列を英語の発音で比較 r=soundslike("hello","helow");
SPEDIS
2つの文字列のレーベンシュタイン 距離を返す
distance=spedis("test","twist");
SYSPARM SYSPARM=オプション指定値を返す sysparm=sysparm();
SYSPROD
そのプロダクトのライセンス有無を チェックする
prod_chk=sysprod("WPS");
SYSTEM
OSコマンドを呼び出しシステムリタ ーンコードを返す
rc=system("dir c:\");
[別表 9] フォーマット一覧
分類 フォーマット名 意味
wとdの範 囲 (デフ ォルト)
例 結果
数値コ ード変 換
BINARYw.
数値をバイナリコード(0 or 1) で書き出す
1-64 (8) x=256;put x binary10.; 0100000000
HEXw. 数値を 16 進数で書き出す 1-16 (8) x=512;put x hex8.; 00000200
IBw.d
数値を整数バイナリ形式で書 き出す
1-8 (4) x=put(12345,ib8.);put x $hex16.; 3930000000000000
IBRw.d
数値をOS環境下依存の整 数バイナリ形式で書き出す
1-8 (4) x=put(12345,ibr8.);put x $hex16.; 3930000000000000
IEEEw.d
数値を IEEE 浮動小数点で書 き出す
1-8 (8) x=put(1,ieee8.);put x $hex16.; 3FF0000000000000
OCTALw. 数値を8進数表記で書き出す 1-24 (3) x=123456789012345;put x octal24.; 000000003404420603357571しかk
dataminetech.co.jp
http://www.dataminetech.co.jp/soft/WPS2.2_Startup_Guide.pdf