DELETE OUTPUT SAS

【SAS】OUTPUTとDELETEの「明示的な使い方」「暗黙的な使い方」

投稿日:2021年12月8日 更新日:

今回は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されるとき、他のオブザベーションは出力される。

-DELETE, OUTPUT, SAS

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

【SAS】SUMMARYは集計に便利

今回はSUMMARYについて解説します。 /*正常形*/ data data1; 契約番号=”AAAAAA”; 会社コード=”02″; 請求金額=4999; output; 契約番号=”AAAAAA” …

【SAS】TRANSPOSEは縦持ち、横持ちを変換できる。その2

今回もTRANSPOSEについて解説します。 前回は縦持ち⇒横持ちにする流れで解説してきました。 【SAS】TRANSPOSEは縦持ち、横持ちを変換できる。その1 今回は横持ち ⇒ 縦持ちの流れに沿っ …

【SAS】PUTN関数は数値に対して出力形式を指定して変換する。

今回はPUTN関数について解説します。 /* putn_point. */ proc format; value point 1-50=’Low’ 51-100=’High’; run; data d …

【SAS】SASで良く使うテクニック。その4 「参照元のトレース」~データセットの差分がある箇所を探すのに便利~【Excel】

今回はSASで良く使うテクニックということで、データセットの差分がある箇所を探すときは「参照元のトレース」が役に立つ理由を解説していきます。 (参考:【SAS】SASで良く使うテクニック。その1 Ex …

【SAS】TRANSTRN関数は指定した文字を別の文字に変換する。

/* a */ data data1; Id1=”abcd”; Id2=”ABCD”; output; Id1=”abcd”; Id2=”ABCD”; output; Id1=”abcd”; Id2= …