CATS・CATX関数はご存知でしょうか?
ご存知ないって方は、むかし書いた記事をご覧ください。
http://sas-boubi.blogspot.jp/2017/05/my-favorite-sas-functions-1-cats.html
http://sas-boubi.blogspot.jp/2017/05/my-favorite-sas-functions-2-catx.html
ここから本題
上で紹介した関数とは別に「CALL CATS」,「CALL CATX」ってのもあります。
CALL CATS( 結果を格納する変数, 変数1, 変数2,… 変数n )
|
変数1 ~ 変数n の値を結合し、第1引数に指定した変数に結果を格納します。
CALL CATX( 区切り文字, 結果を格納する変数, 変数1, 変数2,… 変数n )
|
変数1 ~ 変数n の値を区切り文字付きで結合し、第2引数に指定した変数に結果を格納します。
つまり、CATS関数で以下のように書いていた文が、、
Y = CATS( X1,X2,X3 );CALL CATSだと以下のように書けます。
CALL CATS( Y, X1,X2,X3 );
CATS関数を例に、以下のケースを考えてみます。
data DT1;
length RESULT $200.;
X2 = "cd";
X3 = "bc";
/* CATS関数で文字を結合 */
array AR(*) X1-X3;
do i = 1 to dim(AR);
if index(AR(i),"c") then RESULT = cats( RESULT,AR(i) );
end;
run;
|
X1~X3 の中で変数値に "c" が含まれているものを結合して変数RESULTに格納しています。
以下は、CALL CATS を使う場合。
array AR(*) X1-X3;
do i = 1 to dim(AR);
if index(AR(i),"c") then call cats( RESULT,AR(i) );
end;
|
正直、CATSでもCALL CATSでも文の長さは変わらないのでどっちでもいいんですが、なんとなく
RESULT = cats( RESULT,AR(i) );
と書くより、
call cats( RESULT,AR(i) );
と書く方が綺麗じゃないですか?こっちだと同じ変数名を2回書く必要がないから。
このように、「結果変数 = cats( 結果変数, 変数1,変数2… )」みたいな書き方になる場合は CALL CATS を使う方が良いように思います。(個人的に)
すみませんが、上記綺麗な書き方のコードを実行したら、結果は下記となっています。
返信削除RESULT X1 X2 X3 i
cdbc ab cd bc 4
RS2018さん、ご指摘ありがとうございます。
返信削除「変数値に "c" が含まれているものを結合」なので、結果は"cdbc"となるのが正しかったですね。。
早速、修正致しました。有難うございます!