1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

配列を用いた条件分岐で一括処理

Posted at

仕様

配列とループ処理を組み合わせることで、複数の変数に一括で同じ処理を行うマクロ変数。
例えば、変数A, B, C, Dそれぞれの欠測値をすべてUN(Unknown)に置き換えるときに使用する。
同じ処理を行う仕様のため、複数の変数同じ型であることが前提である。

コード

chgVarsValue.sas
/*
 * Argument description
 *   type[num]:       if target variable is character, type = 1. else any values.
 *   tgtVal[num/chr]: Target value. if type=1, this argument needs double quotations.
 *   outVal[num/chr]: Output value. if type=1, this argument needs double quotations.
 *   chgVars[chr]:    Target variables. Enter with a space separater. 
 */
%macro chgVarsValue(type, bf, af, chgVars);
    %if &type. = 1 %then %let _type=$;
    %else _type=;
    array chgvv(*) &_type. &chgVars.;
    do _z = 1 to dim(chgvv);
        if chgvv(_z) = &bf. then chgvv(_z) = &af.;
    end;
    drop _z;	
%mend chgVarsValue;

処理内容

前述のように、変数A, B, C, Dそれぞれの欠測値をすべてUN(Unknown)に置き換える場合は次のように引数を指定する。

Example01.sas
%chgVarsValue(1, "", "UN", A B C D)

引数typeで型を指定する必要があるのは、arrayステートメントで配列に変数を定義する際に、文字型の場合は変数名の前に"$"が必要であるためです。
つまり、type=1の場合はarray chgvv(*) $ A B C Dとなり、それ以外の場合(数値型の場合)はarray chgvv(*) A B C Dとなります。
配列に指定された変数はすべてループで順番に同じif文の処理が実行され、引数bfで指定された値から引数afで指定された値に変換されます。

実行結果

マクロchgVarsValueの使用例と実行結果(データセットresult)です。

Example02.sas
data sample;
    AA = "abc"; BB = "efg"; CC = "hij"; output;
    AA = "";    BB = "efg"; CC = "hij"; output;
    AA = "abc"; BB = "";    CC = "hij"; output;
    AA = "abc"; BB = "efg"; CC = "";    output;
    AA = "abc"; BB = "";    CC = "";    output;
    AA = "";    BB = "efg"; CC = "";    output;
    AA = "";    BB = "";    CC = "hij"; output;
    AA = "";    BB = "";    CC = "";    output;
run;

data result;
    set sample;
    %chgVarsValue(1, "", "UN", AA BB CC);
run;

mChgVarsValue_Result.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?