変数名を省略する便利な書き方をまとめます。
*** サンプルデータ ; data DT1; A1 = 1; A2 = 1; A3 = 1; B = "abc"; C = 2; run; |
*** A1~A3まで連番になってる変数 ;
data DT2;
set DT1;
keep A1 - A3; /* 「keep A3 - A1」と逆にしてもok */
run;
*** 変数名がAで始まる変数 ;
data DT3;
set DT1;
keep A: ;
run;
*** A3からCまで順番に格納されてる変数 ;
data DT4;
set DT1;
keep A3 -- C;
run;
*** A3からCまで順番に格納されてる変数の中での数値変数 ;
data DT5;
set DT1;
keep A3 -numeric- C;
run;
*** A3からCまで順番に格納されてる変数の中での文字変数 ;
data DT6;
set DT1;
keep A3 -character- C;
run;
*** 数値変数のみ ;
data DT6;
set DT1;
keep _numeric_;
run;
*** 文字変数のみ ;
data DT6;
set DT1;
keep _character_;
run;
*** 全変数 ;
data DT6;
set DT1;
keep _all_;
run;
今回はKEEPステートメントでの例でしたが、さまざまなステートメントで使えます。
気をつけなきゃいけないのは以下のように関数中に指定するケース。
× sum(A1-A3);
○ sum(of A1-A3);
「A1-A3」だと引き算の意味になってしまう!この場合は必ず「of」を先頭につけましょう。
あとは、変数の格納順をコロコロ変えるかもしれないデータセットに対して
「A3 -- C」、 「A3 -numeric- C」、 「A3 -character- C」といった省略文を書くのは避けましょう。
(変数の格納順が変わるたびに、この省略文を修正しなきゃいけなくなって、プログラムとして不安定になる)
気をつけなきゃいけないのは以下のように関数中に指定するケース。
× sum(A1-A3);
○ sum(of A1-A3);
「A1-A3」だと引き算の意味になってしまう!この場合は必ず「of」を先頭につけましょう。
あとは、変数の格納順をコロコロ変えるかもしれないデータセットに対して
「A3 -- C」、 「A3 -numeric- C」、 「A3 -character- C」といった省略文を書くのは避けましょう。
(変数の格納順が変わるたびに、この省略文を修正しなきゃいけなくなって、プログラムとして不安定になる)
proc transpose 後のデータセットをprint する時に重宝してます。
返信削除いつも助かってます。
正直、このサイトが無かったらSASの利用を断念していたかも知れません。
ありがとうございます。
自分もそろそろSASまとめを作ろうと思います。
野沢様
削除コメント有難う御座います。
そういって頂けて、今後のモチベーションになります。有難う御座います。
野沢様のSASまとめ、楽しみにしております!