今回はOUTPUTとDELETEにスポットを当てていきたいと思います。
/* output, delete無し */
data data1;
Id1=1111; Char1="AAAA";
output;
Id1=2222; Char1="BBBB";
output;
Id1=3333; Char1="CCCC";
output;
Id1=4444; Char1="DDDD";
output;
run;
data data2;set data1;
run;
- データステップで中身に処理が記述されていない場合は全て出力される。(暗黙的にoutputした)
/* if Id1=1111 then output; */
data data1;
Id1=1111; Char1="AAAA";
output;
Id1=2222; Char1="BBBB";
output;
Id1=3333; Char1="CCCC";
output;
Id1=4444; Char1="DDDD";
output;
run;
data data2;set data1;
if Id1=1111 then output;
run;
- if文で一部にoutputが為されるとき、他のオブザベーションは出力されない。
/* if Id1=1111 then Char1="aaaa"; */
data data1;
Id1=1111; Char1="AAAA";
output;
Id1=2222; Char1="BBBB";
output;
Id1=3333; Char1="CCCC";
output;
Id1=4444; Char1="DDDD";
output;
run;
data data2;set data1;
if Id1=1111 then Char1="aaaa";
run;
- if文で代入処理されるとき、全てのオブザベーションは出力される。
/*
if Id1=1111 then output;
if Char1="DDDD";
*/
data data1;
Id1=1111; Char1="AAAA";
output;
Id1=2222; Char1="BBBB";
output;
Id1=3333; Char1="CCCC";
output;
Id1=4444; Char1="DDDD";
output;
run;
data data2;set data1;
if Id1=1111 then output;
if Char1="DDDD";
run;
- if文で一部にoutputされるとき、2つ目のif文で暗黙的outputは実行されない。
/* if Id1=1111 then delete; */
data data1;
Id1=1111; Char1="AAAA";
output;
Id1=2222; Char1="BBBB";
output;
Id1=3333; Char1="CCCC";
output;
Id1=4444; Char1="DDDD";
output;
run;
data data2;set data1;
if Id1=1111 then delete;
run;
- if文でdelete処理が実行されるとき、他のオブザベーションは出力される。
/*
if Id1=1111 then delete;
if Char1="DDDD";
*/
data data1;
Id1=1111; Char1="AAAA";
output;
Id1=2222; Char1="BBBB";
output;
Id1=3333; Char1="CCCC";
output;
Id1=4444; Char1="DDDD";
output;
run;
data data2;set data1;
if Id1=1111 then delete;
if Char1="DDDD";
run;
- if文で一部にdeleteが実行されるとき、2つ目のif文で暗黙的outputも実行される。
/*
if Id1=1111 then output;
output;
*/
data data1;
Id1=1111; Char1="AAAA";
output;
Id1=2222; Char1="BBBB";
output;
Id1=3333; Char1="CCCC";
output;
Id1=4444; Char1="DDDD";
output;
run;
data data2;set data1;
if Id1=1111 then output;
output;
run;
- if文で一部にoutputが実行されるとき、通常outputも実行される。
/*
if Id1=1111;
output;
*/
data data1;
Id1=1111; Char1="AAAA";
output;
Id1=2222; Char1="BBBB";
output;
Id1=3333; Char1="CCCC";
output;
Id1=4444; Char1="DDDD";
output;
run;
data data2;set data1;
if Id1=1111;
output;
run;
- サブセットifによりoutputが実行される。
/*
if Id1 ^= .;
if Id1 = 1111;
*/
data data1;
Id1=1111; Char1="AAAA";
output;
Id1=2222; Char1="BBBB";
output;
Id1=3333; Char1="CCCC";
output;
Id1=4444; Char1="DDDD";
output;
run;
data data2;set data1;
if Id1 ^= .;
if Id1 = 1111;
run;
- 1つ目のif文で真であるレコードが、2つ目のif文で暗黙的outputが実行される。(サブセットif)
/*
if Id1=1111 then delete;
if Id1=1111 then output;
*/
data data1;
Id1=1111; Char1="AAAA";
output;
Id1=2222; Char1="BBBB";
output;
Id1=3333; Char1="CCCC";
output;
Id1=4444; Char1="DDDD";
output;
run;
data data2;set data1;
if Id1=1111 then delete;
if Id1=1111 then output;
run;
- 1つ目のif文でdelete、2つ目のif文でoutputを記載した場合、出力は0オブザベーション(⇒Id1=1111ではdeleteされ、それ以外は素通りされている?)
/*
if Id1=1111 then delete;
if Id1=1111 then output;
*/
data data1;
Id1=1111; Char1="AAAA";
output;
Id1=2222; Char1="BBBB";
output;
Id1=3333; Char1="CCCC";
output;
Id1=4444; Char1="DDDD";
output;
run;
data data2;set data1;
if Id1=1111 then delete;
if Id1=1111 then output;
output;
run;
- 1つ目のif文でdelete、2つ目のif文でoutputを記載した場合、先ほどは0オブザベーションだったが、今回はoutputを加えたため、3件出力となった。
/*
if Id1=1111 then delete;
output;
*/
data data1;
Id1=1111; Char1="AAAA";
output;
Id1=2222; Char1="BBBB";
output;
Id1=3333; Char1="CCCC";
output;
Id1=4444; Char1="DDDD";
output;
run;
data data2;set data1;
if Id1=1111 then delete;
output;
run;
- 1つ目のif文でId1=1111;はdelete、それ以外はoutputを通るため、出力は3件となった。
/*
if Id1=1111 then output;
if Id1=1111 then delete;
*/
data data1;
Id1=1111; Char1="AAAA";
output;
Id1=2222; Char1="BBBB";
output;
Id1=3333; Char1="CCCC";
output;
Id1=4444; Char1="DDDD";
output;
run;
data data2;set data1;
if Id1=1111 then output;
if Id1=1111 then delete;
run;
- 1つ目のif文でoutputが実行されると、そのオブザベーションは出力されるため、それ以降の処理は実行されない。
- Id1=1111;はoutputされてdeleteされない。
/*
if Id1=1111;
if Id1=2222 then output;
*/
data data1;
Id1=1111; Char1="AAAA";
output;
Id1=2222; Char1="BBBB";
output;
Id1=3333; Char1="CCCC";
output;
Id1=4444; Char1="DDDD";
output;
run;
data data2;set data1;
if Id1=1111;
if Id1=2222 then output;
run;
- サブセットifのため、output処理が通らず0オブザベーションとなった。
/*
if Id1=1111;
if Id1=1111 then delete;
*/
data data1;
Id1=1111; Char1="AAAA";
output;
Id1=2222; Char1="BBBB";
output;
Id1=3333; Char1="CCCC";
output;
Id1=4444; Char1="DDDD";
output;
run;
data data2;set data1;
if Id1=1111;
if Id1=1111 then delete;
run;
- サブセットif
- Id1=1111;はdeleteされる。
- それ以外は出力されない。
/*
if Id1=1111 then delete;
if Id1=2222 then delete;
*/
data data1;
Id1=1111; Char1="AAAA";
output;
Id1=2222; Char1="BBBB";
output;
Id1=3333; Char1="CCCC";
output;
Id1=4444; Char1="DDDD";
output;
run;
data data2;set data1;
if Id1=1111 then delete;
if Id1=2222 then delete;
run;
- if文でdeleteされるとき、他のオブザベーションは出力される。