今回はKEEPについて解説していきたいと思います。
DROPと対になる感じで、
DROPが指定したカラムを捨てるのに対し、KEEPは指定したカラムのみ残す動きを取ります。
(参考「DROP」:【SAS】DROPはデータセットから変数を削除する | ビジネスイッチ (how-to-business.com))
(参考「DROPオプション」:【SAS】DROPオプションの位置による処理の違い | ビジネスイッチ (how-to-business.com))
KEEPは
- ステートメント
- オプション
の2つで使えます。
まずはステートメント。(個人的にはこちらで使う事の方が多いと思います。)
/* ステートメント */
data data1;
id1="1111"; id2="1111"; id3="1111";
output;
id1="2222"; id2="2222"; id3="2222";
output;
id1="3333"; id2="3333"; id3="3333";
output;
run;
data data2; set data1;
keep id1 id2;
run;


- KEEPステートメントにより、id1,id2のみ残る。(id3は捨てられる。)
続いてオプションによるKEEP。(個人的には、オプションで使う事はあまり無いと思います。)
/* オプション_1 */
data data1;
id1="1111"; id2="1111"; id3="1111";
output;
id1="2222"; id2="2222"; id3="2222";
output;
id1="3333"; id2="3333"; id3="3333";
output;
run;
data data2; set data1(keep=id1 id2);
keep id1 id2;
run;


- KEEPオプションにより、id1,id2のみ残る。(id3は捨てられる。)
/* オプション_2 */
data data1;
id1="1111"; id2="1111"; id3="1111";
output;
id1="2222"; id2="2222"; id3="2222";
output;
id1="3333"; id2="3333"; id3="3333";
output;
run;
data data2(keep=id1 id2); set data1;
keep id1 id2;
run;


- KEEPオプションにより、id1,id2のみ残る。(id3は捨てられる。)
/* オプション_3 */
data data1;
id1="1111"; id2="1111"; id3="1111";
output;
id1="2222"; id2="2222"; id3="2222";
output;
id1="3333"; id2="3333"; id3="3333";
output;
run;
data data2; set data1(keep=id1 id2);
id4 = "3333";
run;


- KEEPオプションにより、入力データのid1,id2のみ残る。(id3は捨てられる。)
- KEEPの選択後、id4が与えられるので、id4が出力される。
/* オプション_4 */
data data1;
id1="1111"; id2="1111"; id3="1111";
output;
id1="2222"; id2="2222"; id3="2222";
output;
id1="3333"; id2="3333"; id3="3333";
output;
run;
data data2(keep=id1 id2); set data1;
id4 = "3333";
run;


- KEEPオプションにより、出力データのid1,id2のみ残る。(id3,id4は捨てられる。)
- id4が与えられた後、KEEPによる選択が行われるため、id4は出てこない。
このようにオプションでkeepを使用すると、使用箇所によって挙動が変わるので、
特にオプションで使う理由が無ければ、ステートメントで使用した方が無難だと思います。