「定義した配列を関数の中で使うにはどのように書けばよいですか?」
という質問を頂くことがあるので、簡単に紹介します。
「例①」では配列からAR(1)とAR(2)を指定しています。
「例②」では配列ARの全要素を指定しています。
ひとつだけ注意点。
配列には色々な種類がありますが、その配列の種類によっては、例②の書き方が通用しない関数があります(実行時にERRORになる)
VAR = sum(of A1-A5);
|
VAR2 = sum(A1, A3, A5);
↓
VAR2 = sum(of A1 A3 A5); |
| %macro M_SUM( DSNAME, VARS ); data &DSNAME; A=1; B=1; C=1; D = sum(of &VARS); run; %mend; %M_SUM( DT1, A B C );
%M_SUM( DT2, A C );
|
| %M_SUM( DT1, %str(A, B, C) );
%M_SUM( DT2, %str(A, C) );
|
| data DT1; length A B $20.; A = "予防"; B = compress(A, "\"); C = index(A, "\"); run; 結果 A B C 予防 蘭h 2 |
| data DT2;
length A B $20.;
A = "予防"; B = kcompress(A, "\"); C = kindex(A, "\"); run;
結果
A B C 予防 予防 0 |
| data DT1; V1 = 1; V2 = "abc"; VSUM = sum( V1=1, index(V2,"b")>0 ); run; |
| 条件① | 「V1」=「1」である。 |
| 条件② | 「V2」に"b"という文字が含まれている。 |
・条件が全て当てはまらない場合 ・・・ FLG=「1」 ・いずれか当てはまる場合 ・・・ FLG=「2」 ・全て当てはまる場合 ・・・ FLG=「3」 |
|
if not (V1=1 or index(V2,"b")>0) then FLG=1;
if V1=1 or index(V2,"b")>0 then FLG=2;
|
VSUM = sum(V1=1, index(V2,"b")>0);
if VSUM = 0 then FLG=1;
if VSUM > 0 then FLG=2; |